Django: is_authenticated y is_anonymous tanto la rentabilidad cierto después de cerrar la sesión
-
29-09-2019 - |
Pregunta
Estoy usando Django-registro, y simplemente configurarlo.
{{user.is_authenticated }}
Es verdad, a pesar de que ya fui a / accounts / cierre de sesión / cerrar sesión y el usuario cabo.
{{user.is_anonymous }}
También devuelve verdadero. De acuerdo con documentos de Django, los dos deben ser diferentes:
is_anonymous: siempre devuelve False. Esta es una manera de diferenciar los objetos de usuario y AnonymousUser. En general, se debe preferir el uso is_authenticated () para este método.
y
is_authenticated: Siempre devuelve True. Esta es una manera de saber si el usuario ha sido autenticado. Esto no implica ningún permiso, y no comprueba si el usuario está activo -. Sólo indica que el usuario ha proporcionado un nombre de usuario y una contraseña válidos
Estoy utilizando las vistas estándar que vienen con Django-registro y no los han tocado todavía. En el tempalate tengo el siguiente código:
{% if user.is_authenticated %}
{% user }}
{% if user.is_anonymous %}
is anonymous
{% endif $}
{% else %}
gotta login
{% endif %}
¿Dónde sería el problema? Yo estaré muy agradecido!
ACTUALIZACIÓN: he notado que en la página principal, que tanto is_authenticated y el retorno id_anonymous verdadera, mientras que si voy a / accounts / login antes loging en, sólo devuelve is_anonymous verdaderos como debe ser. Y también, en la página principal, tengo la siguiente vista si eso ayuda:
def home(request):
return render_jinja(request, 'index.html', blah = 'ga')
ACTUALIZACIÓN 2: impresión (request.user.is_authenticated ()) da Falso. Entonces, tengo:
return render_jinja(request, 'index.html', blah = 'ga')
y en la plantilla, user.is_authenticated devuelve falso.
ACTUALIZACIÓN 3: Si uso render_to_response, en lugar de render_jinja, todo es bueno. aún no se sabe cómo solucionar este problema sin embargo: (
Solución
Parece como si estuviera tratando de averiguar dos cosas a la vez; ¿cuál es la forma correcta de las plantillas Jinja uso y lo que es el trato con el Usuario / AnonymousUser. Tal vez tratar de averiguar estos problemas uno a la vez.
No tengo ninguna experiencia con jinja pero es posible que desee comprobar y asegurarse de que usted está tomando diferencias entre jinja y Django plantilla de sintaxis en cuenta. La diferencia más grande que conozco es que una llamada al método requiere un paréntesis explícita. Por lo que las llamadas is_authenticated y is_anonymous en su necesidad ejemplo paréntesis.
Jinja style {{ user.is_authenticated() }}
Django style {{ user.is_authenticated }}
Si eso no resuelve el problema, intente instalar django-debug-barra de herramientas y echar un vistazo al contexto de la plantilla. Comprobar y ver si es user
Ninguno o un objeto (Usuario o AnonymousUser).
También puede leer sobre AnonymousUser y ver un ejemplo de comprobar para un usuario autenticado en la documentación. En pocas palabras, para un objeto AnonymousUser is_anonymous () siempre devuelve True en vez de Falso y is_authenticated () siempre devuelve falso en lugar de True.
Otros consejos
Smack en la cabeza. Leí en alguna parte:
Si user.is_authenticated: .... # siempre cierto, ya que es un método!
Y así, en lugar de tener {{}} user.is_authenticated en la plantilla, debe ser {{user.is_authenticated ()}}