Django에서 현재 로그인 한 사용자의 사용자 ID를 얻는 방법은 무엇입니까?


124

현재 로그인 한 사용자의 ID를 얻는 방법은 무엇입니까?

에서 models.py:

class Game(models.model):
    name = models.CharField(max_length=255)
    owner = models.ForeignKey(User, related_name='game_user', verbose_name='Owner')

에서 views.py:

gta = Game.objects.create(name="gta", owner=?)


1
@CiroSantilli新疆改造中心法轮功六四事件복제는 정확한
Tessaracter

답변:


209

먼저 설정에 SessionMiddlewareAuthenticationMiddleware미들웨어가 추가 되었는지 확인하십시오 MIDDLEWARE_CLASSES.

전류 userrequest객체에 있으며 다음과 같이 얻을 수 있습니다.

def sample_view(request):
    current_user = request.user
    print current_user.id

request.userUser현재 로그인 한 사용자를 나타내는 개체 를 제공합니다 . 사용자가 현재 로그인되어 있지 않은 경우이 request.user인스턴스로 설정됩니다 AnonymousUser. 다음과 같이 필드로 구분할 수 있습니다 is_authenticated.

if request.user.is_authenticated:
    # Do something for authenticated users.
else:
    # Do something for anonymous users.


3
외래 키 사용자 ID를 현재 로그인 된 사용자 ID 인 모델로 설정하려면 어떻게해야합니까?
Krishnadas PC

더 이상 설정을 업데이트 할 필요가 없습니다. docs.djangoproject.com/en/1.11/topics/auth/default/...
wooden_metal

2
요청의 출처는 어디입니까?
Sören

User모델 참조에 연결합니다 .
x-yuri 2018


7

Django의 Auth User를 참조한다고 가정하면 다음과 같습니다.

def game(request):
  user = request.user

  gta = Game.objects.create(name="gta", owner=user)

0

나는 이것을 ajax보기로 작성했지만 현재 로그인 및 로그 아웃 한 사용자 목록을 제공하는보다 광범위한 답변입니다.

is_authenticated속성은 항상 True내 사용자에 대해 반환 됩니다. AnonymousUsers 만 확인하기 때문에 예상되지만 로그인 한 사용자가 표시되어야하는 채팅 앱을 개발한다고 말하면 쓸모가 없습니다.

만료 된 세션을 확인한 다음 디코딩 된 _auth_user_id속성 을 기반으로 해당 세션이 속한 사용자를 파악 합니다.

def ajax_find_logged_in_users(request, client_url):
    """
    Figure out which users are authenticated in the system or not.
    Is a logical way to check if a user has an expired session (i.e. they are not logged in)
    :param request:
    :param client_url:
    :return:
    """
    # query non-expired sessions
    sessions = Session.objects.filter(expire_date__gte=timezone.now())
    user_id_list = []
    # build list of user ids from query
    for session in sessions:
        data = session.get_decoded()
        # if the user is authenticated
        if data.get('_auth_user_id'):
            user_id_list.append(data.get('_auth_user_id'))

    # gather the logged in people from the list of pks
    logged_in_users = CustomUser.objects.filter(id__in=user_id_list)
    list_of_logged_in_users = [{user.id: user.get_name()} for user in logged_in_users]

    # Query all logged in staff users based on id list
    all_staff_users = CustomUser.objects.filter(is_resident=False, is_active=True, is_superuser=False)
    logged_out_users = list()
    # for some reason exclude() would not work correctly, so I did this the long way.
    for user in all_staff_users:
        if user not in logged_in_users:
            logged_out_users.append(user)
    list_of_logged_out_users = [{user.id: user.get_name()} for user in logged_out_users]

    # return the ajax response
    data = {
        'logged_in_users': list_of_logged_in_users,
        'logged_out_users': list_of_logged_out_users,
    }
    print(data)

    return HttpResponse(json.dumps(data))

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.