is_authenticated रिटर्न 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

2 उत्तर

यह एक विधि है, संपत्ति नहीं आपको इसे कॉल करने की आवश्यकता है:

if u.is_authenticated():

बेशक, एक टेम्पलेट में, Django आपके लिए कॉल विधियां </ए> स्वचालित रूप से।

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, स्रोत