web-dev-qa-db-fra.com

Obtenir des informations sur l'utilisateur dans les modèles Django

Quel est le meilleur moyen d'obtenir des informations sur l'utilisateur à partir d'un modèle Django?

Par exemple, si je veux juste:

  1. Si l'utilisateur est connecté, affichez "Bienvenue [nom d'utilisateur]"
  2. Sinon, affichez le bouton de connexion.

J'utilise Django-registration/authentication

35
River Tam

Une autre méthode pour les versions actuelles de Django:

{% if user.is_authenticated %}
    <p>Welcome, {{ user.get_username }}. Thanks for logging in.</p>
{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}


Remarque: 

  • Utilisez request.user.get_username() dans les vues et user.get_username dans les modèles. Préféré par rapport à l'attribut username de référence directement. La source
  • Cette variable de contexte de modèle est disponible si un RequestContext est utilisé.
  • Django.contrib.auth.context_processors.auth est activé par défaut et contient la variable user 
  • Vous n'avez PAS besoin d'activer le processeur de contexte Django.core.context_processors.request template.

Source: https://docs.djangoproject.com/en/dev/topics/auth/default/#authentication-data-in-templates

56
user
{% if request.user.is_authenticated %}Welcome '{{ request.user.username }}'
{% else %}<a href="{% url Django.contrib.auth.login %}">Login</a>{% endif %}

et assurez-vous que le processeur de contexte de modèle request est installé dans votre settings.py:

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'Django.core.context_processors.request',
    ...
)
37
Timmy O'Mahony

Selon le titre de la question, les éléments suivants peuvent être utiles à quelqu'un. utilisé les éléments suivants dans mon modèle:

Nom d'utilisateur : {{ user.username }}

Nom complet de l'utilisateur : {{ user.get_full_name }}

Groupe d'utilisateurs : {{ user.groups.all.0 }}

Email : {{ user.email }}

Session démarrée à : {{ user.last_login }}

Merci :)

5
Mohammad

Premièrement, premièrement, si vos champs ont changé de nom, vous devez écraser les fonctions (get_full_name (), get_short_name (), etc.), de cette façon:

def get_full_name(self):
    return self.names + ' ' + self.lastnames

def get_short_name(self):
    return self.names

Dans le modèle, vous pouvez le montrer de cette façon

{% if user.is_authenticated %}
<strong>{{ user.get_short_name }}</strong>
{% endif %}

ce sont les méthodes d'authentification https://docs.djangoproject.com/es/2.1/topics/auth/customizing/