Django: IS__Authenticated и IS_Anonymous Оба возврата True после выхода
-
29-09-2019 - |
Вопрос
Я использую Django-регистрацию и просто настроил его.
{{user.is_authenticated }}
Это правда, хотя я уже пошел в/учетные записи/вход/и вышел из строя пользователя.
{{user.is_anonymous }}
Возвращает истина. Согласно Django Docs, эти два должны быть разными:
is_anonymous: всегда возвращает ложь. Это способ дифференцировать объекты пользователя и анонимного обучения. Как правило, вы должны предпочесть использовать is_authenticated () для этого метода.
и
IS_Authentized: всегда возвращает true. Это способ сказать, был ли пользователь аутентифицирован. Это не подразумевает никаких разрешений, и не проверяет, активен ли пользователь - он только указывает, что пользователь предоставил действительное имя пользователя и пароль.
Я использую стандартные взгляды, которые поставляются с Django-регистрацией и еще не тронули их. В Tempalate у меня есть следующий код:
{% if user.is_authenticated %}
{% user }}
{% if user.is_anonymous %}
is anonymous
{% endif $}
{% else %}
gotta login
{% endif %}
Где бы проблема была бы? Я буду действительно благодарен!
Обновление: Я заметил, что на домашней странице он оба is_authenticate, и id_Anonymous возвращает true, а если я перехожу к / учетным записям / логин, прежде чем войти, только IS_Anonymous возвращает true, как это должно быть. А также на домашней странице у меня есть следующий вид, если это поможет:
def home(request):
return render_jinja(request, 'index.html', blah = 'ga')
Обновление 2: print (request.user.is_authenticated ()) дает false. Тогда у меня есть:
return render_jinja(request, 'index.html', blah = 'ga')
А в шаблоне user.is_authenticated возвращает false.
Обновление 3: Если я использую render_to_response, вместо render_jinja, все хорошо. все еще не знаю, как это исправить :(
Решение
Кажется, что вы пытаетесь выяснить две вещи одновременно; Как правильный способ использовать шаблоны Jinja и в чем дело с пользователем/анонимным. Может быть, попытаться выяснить эти проблемы по одному.
У меня нет опыта работы с Джинджей, но вы можете проверить и убедиться, что вы берете Различия между синтаксисом шаблона Jinja и Django в учетную запись. Самое большое значение, которое я знаю, это то, что вызов метода требует явного скобка. Итак, IS_AUTHENTENTICATION и IS_ANONYUS в вашем примере нуждается в скобках.
Jinja style {{ user.is_authenticated() }}
Django style {{ user.is_authenticated }}
Если это не решит проблему, попробуйте установить Django-debug-панель инструментов И посмотрите на контекст для вашего шаблона. Проверьте и посмотрите, есть ли user
ни один из них или объект (пользователь или анонимный орган).
Вы также можете прочитать на Аноним и посмотреть пример Проверка на аутентифицированного пользователя в документах. В двух словах, для объекта Anonymouser IS_Anonymous () всегда возвращает true вместо false, а iS__Authenticate () всегда возвращает false вместо true.
Другие советы
Чмокать на голову. Я где-то читал:
Если user.is_authenticated: ....# всегда правда, так как это метод!
И поэтому вместо того, чтобы иметь {{user.is_authenticated}} в шаблоне, он должен быть {{user.is_authenticated ()}}