django:is_authenticatedとis_anonymous両方ともログアウト後にtrueを返します
-
29-09-2019 - |
質問
私はdjango-registrationを使用しており、それをセットアップしています。
{{user.is_authenticated }}
私はすでに/accounts/logout/に行って、ユーザーをログアウトしましたが、本当です。
{{user.is_anonymous }}
真実も返します。 Django Docsによると、これら2つは異なるはずです。
is_anonymous:常にfalseを返します。これは、ユーザーと匿名のオブジェクトを区別する方法です。一般に、この方法にis_authenticated()を使用することを好む必要があります。
と
is_authenticated:常にtrueを返します。これは、ユーザーが認証されているかどうかを判断する方法です。これは許可を意味するものではなく、ユーザーがアクティブであるかどうかを確認しません - ユーザーが有効なユーザー名とパスワードを提供したことのみを示します。
私は、Django-Registrationに伴う標準的なビューを使用しており、まだ触れていません。 Tempalateには、次のコードがあります。
{% if user.is_authenticated %}
{% user }}
{% if user.is_anonymous %}
is anonymous
{% endif $}
{% else %}
gotta login
{% endif %}
問題はどこにありますか?本当に感謝します!
更新:ホームページでは、is_authenticatedとid_anonymousの両方がtrueであることに気付きましたが、ログインする前に /accounts /loginに移動すると、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の代わりに、すべてが良いです。それでもこれを修正する方法がわからない:(
解決
あなたは一度に2つのことを理解しようとしているようです。 Jinjaテンプレートを使用する正しい方法と、ユーザー/匿名性との取引は何ですか。たぶん、これらの問題を一度に1つずつ理解してみてください。
私はジンジャとの経験はありませんが、あなたが服用していることを確認して確認することをお勧めします JinjaとDjangoテンプレートの構文の違い 考慮されます。私が知っている最大の違いは、メソッド呼び出しには明示的な括弧が必要であることです。したがって、例のis_authenticatedおよびis_anonymous呼び出しには、括弧が必要です。
Jinja style {{ user.is_authenticated() }}
Django style {{ user.is_authenticated }}
それが問題を解決しない場合は、インストールしてみてください Django-Debug-Toolbar テンプレートのコンテキストをご覧ください。確認して確認してください user
なしまたはオブジェクト(ユーザーまたはAnonymoususer)です。
あなたも読むことができます Anonymoususer の例を参照してください 認証されたユーザーをチェックします ドキュメントで。一言で言えば、匿名のオブジェクトの場合、is_anonymous()は常にfalseの代わりにtrueを返し、is_authenticated()は常にtrueではなくfalseを返します。
他のヒント
頭を叩きます。どこかで読んだ:
user.is_authenticated:....
したがって、テンプレートに{{user.is_authenticated}}を持つ代わりに、{{user.is_authenticated()}}である必要があります。