Je regarde ce site mais je n'arrive pas à comprendre comment faire, car cela ne fonctionne pas. Je dois vérifier si l'utilisateur du site actuel est connecté (authentifié) et j'essaie:
request.user.is_authenticated
en dépit d'être sûr que l'utilisateur est connecté, il retourne simplement:
>
Je suis capable de faire d'autres demandes (de la première section de l'URL ci-dessus), telles que:
request.user.is_active
qui renvoie une réponse réussie.
Mise à jour pour Django 1.10+ : is_authenticated
est maintenant un attribut dans Django 1.10. La méthode existe toujours pour la compatibilité ascendante, mais sera supprimée dans Django 2.0.
Pour Django 1.9 et plus ancien :
is_authenticated
est une fonction. Vous devriez l'appeler comme
if request.user.is_authenticated():
# do something if the user is authenticated
Comme Peter Rowell l'a fait remarquer, ce qui peut vous déranger, c'est que dans le langage par défaut de gabarit Django, vous ne colliez pas entre parenthèses pour appeler des fonctions. Donc, vous avez peut-être vu quelque chose comme ceci dans le code du template:
{% if user.is_authenticated %}
Cependant, dans le code Python, il s’agit bien d’une méthode de la classe User
.
Le bloc suivant devrait fonctionner:
{% if user.is_authenticated %}
<p>Welcome {{ user.username }} !!!</p>
{% endif %}
Django 1.10+
Utilisez un attribut, not une méthode:
if request.user.is_authenticated: # <- no parentheses any more!
# do something if the user is authenticated
L'utilisation de la méthode du même nom est obsolète dans Django 2.0 et n'est plus mentionnée dans la documentation de Django.
CallableBool
et non un booléen, ce qui peut causer des bugs étranges. Par exemple, j'avais une vue qui renvoyait JSONreturn HttpResponse(json.dumps({
"is_authenticated": request.user.is_authenticated()
}), content_type='application/json')
que, après la mise à jour de la propriété request.user.is_authenticated
, levait l’exception TypeError: Object of type 'CallableBool' is not JSON serializable
. La solution consistait à utiliser JsonResponse, qui pouvait gérer correctement l'objet CallableBool lors de la sérialisation:
return JsonResponse({
"is_authenticated": request.user.is_authenticated
})
A votre avis:
{% if user.is_authenticated %}
<p>{{ user }}</p>
{% endif %}
Dans vos fonctions de contrôleur, ajoutez un décorateur:
from Django.contrib.auth.decorators import login_required
@login_required
def privateFunction(request):