183 votes

Comment obtenir l'identifiant de l'utilisateur actuellement connecté dans Django ?

Comment obtenir l'identifiant de l'utilisateur actuellement connecté ?

Dans models.py:

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

Dans views.py:

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

2 votes

2 votes

@CiroSantilli Duplicate exact

312voto

Kay Zhu Points 9703

Tout d'abord, assurez-vous d'avoir les middlewares SessionMiddleware et AuthenticationMiddleware ajoutés à votre paramètre MIDDLEWARE_CLASSES.

Le user actuel est dans l'objet request, vous pouvez l'obtenir en utilisant :

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

request.user vous donnera un objet User représentant l'utilisateur actuellement connecté. Si un utilisateur n'est pas actuellement connecté, request.user sera défini sur une instance de AnonymousUser. Vous pouvez les distinguer avec le champ is_authenticated, comme ceci :

if request.user.is_authenticated:
    # Faire quelque chose pour les utilisateurs authentifiés.
else:
    # Faire quelque chose pour les utilisateurs anonymes.

0 votes

4 votes

Et si nous voulons définir la clé étrangère userid sur un modèle qui correspond à l'identifiant de l'utilisateur actuellement connecté ?

0 votes

Vous n'avez plus besoin de mettre à jour les paramètres. docs.djangoproject.com/fr/1.11/topics/auth/default/…

30voto

Vous pouvez accéder à l'utilisateur actuellement connecté en utilisant le code suivant :

request.user.id

8voto

Neil Points 1484

En supposant que vous faites référence à l'utilisateur Auth de Django, dans votre vue :

def jeu(requête):
  utilisateur = requête.user

  gta = Jeu.objects.create(nom="gta", propriétaire=utilisateur)

2voto

Mujeeb I. Points 11

DEPUIS LES MODÈLES

C'est ainsi que je récupère généralement l'utilisateur actuellement connecté et son identifiant dans mes modèles.

Votre nom d'utilisateur est : {{user}} 
Votre identifiant d'utilisateur est : {{user.id}}

0voto

ViaTech Points 500

J'ai écrit ceci dans une vue ajax, mais c'est une réponse plus détaillée donnant la liste des utilisateurs actuellement connectés et déconnectés.

L'attribut is_authenticated retourne toujours True pour mes utilisateurs, ce qui est probablement attendu puisqu'il ne vérifie que les AnonymousUsers, mais cela se révèle inutile si vous devez développer une application de chat où vous avez besoin d'afficher les utilisateurs connectés.

Cela vérifie les sessions expirées et détermine ensuite à quel utilisateur elles appartiennent en fonction de l'attribut décodé _auth_user_id:

def ajax_find_logged_in_users(request, client_url):
    """
    Déterminez les utilisateurs authentifiés dans le système ou non.
    Est un moyen logique de vérifier si un utilisateur a une session expirée (c'est-à-dire qu'il n'est pas connecté)
    :param request:
    :param client_url:
    :return:
    """
    # interroger les sessions non expirées
    sessions = Session.objects.filter(expire_date__gte=timezone.now())
    user_id_list = []
    # construire la liste des identifiants utilisateur à partir de la requête
    for session in sessions:
        data = session.get_decoded()
        # si l'utilisateur est authentifié
        if data.get('_auth_user_id'):
            user_id_list.append(data.get('_auth_user_id'))

    # rassembler les personnes connectées à partir de la liste des clés primaires
    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]

    # Interroger tous les utilisateurs du personnel connectés en fonction de la liste d'identifiants
    all_staff_users = CustomUser.objects.filter(is_resident=False, is_active=True, is_superuser=False)
    logged_out_users = list()
    # pour une raison quelconque, exclude() ne fonctionnerait pas correctement, donc j'ai fait les choses à ma manière.
    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]

    # renvoyer la réponse ajax
    data = {
        'logged_in_users': list_of_logged_in_users,
        'logged_out_users': list_of_logged_out_users,
    }
    print(data)

    return HttpResponse(json.dumps(data))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X