is_authenticated повертає True для AnonymousUser

Я боремося з тим, що is_authenticated повертає True , коли я не увійшов у систему:

u = request.user
if u.is_authenticated:
    raise Exception('I am said to be authenticated, but I really am not.')

Щоб уточнити, вигляд налагодження Django правильно ідентифікує u як AnonymousUser :

u   

Ще більш непарний, всередині шаблону is_anonymous відмінно працює.

{% if not request.user.is_authenticated %}
    We are anonymous.
{% endif %}

Чому так?

4
додано Автор Paul Kenjora, джерело

2 Відповіді

Це метод . не майно Вам потрібно це називати:

if u.is_authenticated():

Звичайно, у шаблоні Джанго виклику методи для вас автоматично.

26
додано

is_authenticated is a method, so you need some parentheses there. Otherwise, u.is_authenticated is the function object, which is a Trueish value.

У мові шаблону функції, які не мають аргументів, оцінюються як функції, тому ви добре там.

6
додано
О, дякую. Це має сенс. Одним з таких тонких помилок ви не можете навчати очей після багатьох років роботи з мовою, яка дозволяє тільки булів у цьому стані.
додано Автор Dan Abramov, джерело