web-dev-qa-db-fra.com

A quoi fait référence request.user dans Django?

J'ai de la confusion concernant ce à quoi request.user fait référence dans Django? Fait-il référence au champ nom d'utilisateur dans la table auth_user ou fait-il référence à l'instance du modèle utilisateur?

J'ai eu ce doute car je n'ai pas pu accéder au champ e-mail dans le modèle à l'aide de {{request.user.username}} ou {{user.username}}.

Donc, à la place, j'ai fait ce qui suit dans le fichier de vues:

userr = User.objects.get(username=request.user)

Et passé userr au modèle et accédé au champ e-mail comme {{ userr.email }}.

Bien que ça marche mais je voulais avoir une certaine clarté à ce sujet.

21
himalayanZephyr

Si votre modèle reçoit AnonymousUser , la référence à {{request.user.email}} ne sera pas trouvé. Auparavant, vous devez demander si {{request.user.is_authenticated }}.

Vous devez vérifier s'il est inclus Django.core.context_processors.auth processeur de contexte dans TEMPLATE_CONTEXT_PROCESSORS section des paramètres. Si vous utilisez Django 1.4 ou plus récent, le processeur de contexte est Django.contrib.auth.context_processors.auth. Ce processeur de contexte est responsable d'inclure l'objet utilisateur dans chaque demande.

11
emigue

request.user est un objet de modèle utilisateur.

Vous ne pouvez pas accéder à l'objet de demande dans le modèle si vous ne transmettez pas explicitement request. Si vous souhaitez accéder à l'objet utilisateur à partir du modèle, vous devez le transmettre au modèle ou utiliser RequestContext.

13
falsetru

Cela dépend de ce que vous définissez.

Donc, il vaut mieux utiliser

user = User.objects.get(username=request.user.username)

En fait, vous n'avez pas besoin de définir de telles variables si vous ajoutez 'Django.core.context_processors.request' dans le TEMPLATE_CONTEXT_PROCESSORS liste dans settings.py

Vous pouvez ensuite accéder à la variable {{request.user.username}} dans les modèles si vous utilisez render dans views.py

2
suhailvs

request.user fait référence à l'instance de modèle utilisateur réelle.

request.user.FIELDNAME vous permettra d'accéder à tous les champs du modèle utilisateur

0
jammas615