¿Cómo obtener la identificación de usuario del usuario actualmente conectado en Django?

124

¿Cómo obtener la identificación del usuario actualmente conectado?

en models.py:

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

en views.py:

gta = Game.objects.create(name="gta", owner=?)
k44
fuente
1
Posible duplicado de In Django, ¿cómo conozco al usuario actualmente conectado?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
@CiroSantilli 新疆 改造 中心 法轮功 六四 事件 Duplicado exacto
Tessaracter

Respuestas:

209

Primero asegúrese de tener SessionMiddlewarey AuthenticationMiddlewaremiddlewares agregados a su MIDDLEWARE_CLASSESconfiguración.

La corriente userestá en el requestobjeto, puede obtenerla:

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

request.userle dará un Userobjeto que representa al usuario actualmente conectado. Si un usuario no está conectado actualmente, request.userse establecerá en una instancia de AnonymousUser. Puede distinguirlos con el campo is_authenticated, así:

if request.user.is_authenticated:
    # Do something for authenticated users.
else:
    # Do something for anonymous users.
KZ
fuente
3
¿Qué sucede si queremos establecer el ID de usuario de la clave externa en un modelo que es el ID del usuario actualmente conectado?
Krishnadas PC
Ya no necesita actualizar la configuración. docs.djangoproject.com/en/1.11/topics/auth/default/…
wooden_metal
2
¿De dónde viene la solicitud?
Sören
Enlace a la referencia del Usermodelo .
x-yuri
22

Puede acceder al usuario registrado actualmente utilizando el siguiente código:

request.user.id
sriram veeraghanta
fuente
7

Suponiendo que se refiere al usuario de autenticación de Django , en su opinión:

def game(request):
  user = request.user

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

Escribí esto en una vista ajax, pero es una respuesta más amplia que da la lista de usuarios actualmente conectados y desconectados.

El is_authenticatedatributo siempre devuelveTrue para mis usuarios, lo que supongo que es de esperar, ya que solo busca AnonymousUsers, pero eso resulta inútil si tuviera que desarrollar una aplicación de chat donde necesita que se muestren los usuarios registrados.

Esto comprueba las sesiones caducadas y luego determina a qué usuario pertenecen en función del _auth_user_idatributo decodificado :

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))
ViaTech
fuente