Şu anda oturum açmış olan kullanıcının kullanıcı kimliği Django'da nasıl alınır?


124

Şu anda oturum açmış olan kullanıcının kimliği nasıl alınır?

içinde models.py:

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

içinde views.py:

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


1
@CiroSantilli 新疆 改造 中心 法轮功 六四 事件 Exact Duplicate
Tessaracter

Yanıtlar:


209

İlk bulunduğundan emin olun SessionMiddlewareve AuthenticationMiddlewareara katman sizin eklendi MIDDLEWARE_CLASSESayara.

Geçerli userolduğu requestsen bunu elde edebilirsiniz, nesne:

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

request.usersize Usero anda oturum açmış olan kullanıcıyı temsil eden bir nesne verecektir . Bir kullanıcı şu anda oturum açmamışsa, request.userörneğine ayarlanacaktır AnonymousUser. Onları alanla ayırt edebilirsiniz is_authenticated, örneğin:

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


3
Ya yabancı anahtar kullanıcı kimliğini, şu anda oturum açmış olan kullanıcı kimliği olan bir modele ayarlamak istersek?
Krishnadas PC

Artık ayarları güncellemenize gerek yok. docs.djangoproject.com/en/1.11/topics/auth/default/…
wooden_metal

2
Talep nereden geliyor?
Sören

Bağlantı Usermodeli referans.
x-yuri



0

Bunu bir ajax görünümünde yazdım, ancak şu anda oturum açmış ve oturumu kapatmış kullanıcıların listesini veren daha kapsamlı bir cevap.

is_authenticatedNitelik daima döner Truebeklediğimden varsayalım benim kullanıcılar için yalnızca AnonymousUsers denetler, ama bu görüntülenen kullanıcılar giriş gereken bir sohbet uygulamasını geliştirmek deseydim yararsız kanıtlıyor beri.

Bu, süresi dolan oturumları kontrol eder ve ardından kodu çözülmüş _auth_user_idözelliğe göre hangi kullanıcıya ait olduklarını belirler :

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))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.