このユーザーが匿名であるか、実際にシステム上のユーザーであるかを確認するにはどうすればよいですか?


84
def index(request):
    the_user = request.user

Djangoでは、それが実際のユーザーであるかどうかをどのように知ることができますか?私は試した:

if the_user: ただし、「AnonymousUser」は誰もログインしていなくても存在します。したがって、常にtrueが返され、これは機能しません。

回答:


140

request.user.is_anonymous返されるかどうかを確認できますTrue


21
これは関数であるviews.pyためrequest.user.is_anonymous()、使用する必要があることに注意してください。テンプレートでは、使用する必要があります{{user.is_anonymous}}
amigcamel 2014年

12
Django 1.9のようにis_authenticated()見えます:docs.djangoproject.com/en/1.9/topics/auth/default/
Paolo Stefan

13
Django 1.10以降、is_anonymousはメソッドではなくなりました(単なるプロパティ)
maxbellec 2016

2
私はパオロステファンに同意しなければなりません、あなたが使いたい方法はis_authenticated()です。thegarywilson.com/blog/2006/is_authenticated-vs-is_anonymous
Al Sweigart 2017年

3
現在の推奨事項はrequest.user.is_authenticated、Django1.10以降の属性であるを使用するis_anonymousことです。これは現在と同じです。docs.djangoproject.com / en / dev / ref / contrib / auth /…を参照してください。参照-あなたはまた、Djangoのガーディアンを使用しているならば、これらの属性は、あなたは彼らがなると思う何をしないことに注意してくださいdjango-guardian.readthedocs.io/en/stable/configuration.htmlは
rhunwicks

18

の代替

if user.is_anonymous():
    # user is anon user

ユーザーオブジェクトのIDが何であるかをテストすることによってです:

if user.id == None:
    # user is anon user
else:
    # user is a real user

https://docs.djangoproject.com/en/dev/ref/contrib/auth/#anonymous-usersを参照してください


4
悪い考えのようです。user.is_anonymous()は新しいバージョンで機能し続けますが、将来の実装によってはuser.idが機能しない可能性があります
maxbellec 2016

また、Django Guardianを使用している場合は、匿名ユーザーにもIDが割り当てられることに注意してください-django-guardian.readthedocs.io/en/stable/…を参照してください。
rhunwicks

そしてあたりの現在の推薦docs.djangoproject.com/en/dev/ref/contrib/auth/...はUser.is_authenticatedを使用することです
rhunwicks

残念ながら、これは機能しません。それは私が最初に試したものでした。user == None(およびその他のバリエーション)を使用すると、「匿名」ユーザーが表示されるようです。
ハーリン

4

私はここで少し墓掘りをしていることを知っていますが、グーグル検索は私をこのページに連れて行きました。

ビュー定義でユーザーがログインする必要がある場合は、@ login_requiredデコレータを実装できます。

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):

これは、カスタマイズしないと、ストックの「ログイン」ビューでは機能しません。
ハーリン

0

login_redirect_urlが送信されたページにあることを除いて、同様の問題が発生しました。テンプレートを入力する必要がありました。

{% if user.is_authenticated %}
    Welcome Back, {{ username }}
{% endif %}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.