3

user.is_authenticated()かどうかを確認しようとしてuser.has_perm()いますが、django クラスベースの生成ビューを拡張することは不可能のようです。requestが表示される場所で見つけた唯一の方法はget().

class MyDetailView(DetailView):
    def get(self, request, **kwargs):
        import pdb
        pdb.set_trace()
        self.object = self.get_object()
        context = self.get_context_data(object=self.object)
        return self.render_to_response(context)

ログインしているかどうかに関係なく、それrequest.userがインスタンスであることがわかりました。AnonymusClass

(Pdb) request.user.__class__
<class 'django.contrib.auth.models.AnonymousUser'>

したがって、認証またはパーマのチェックは常に失敗します。

(Pdb) self.request.user.is_authenticated()
False

get_object()、などの他のメソッドをオーバーライドしようとしましget_context_data()た。私はそれらのそれぞれにself.request利用可能な属性がありますが、userまだAnonymus.

だから私の質問は次のとおりです:ユーザーがクラスベースのビューを使用してログインしているかどうかを確認するにはどうすればよいですか!?

(戻って)関数ベースのビューを使用する必要があるということですか?

私は使用Python 2.7.1+していますDjango version 1.4 pre-alpha SVN-16627




EVIAAC の投稿への回答: Using login_requiredor permissions_requireddecorators is not an option. オブジェクトを取得した後、アクセス許可/ログオンを確認する必要があります。オブジェクトに boolean フィールドregistration_requiredが設定されている場合、要求されたTrueユーザーのみがページを表示できるようになり、他のユーザーはログオン ページにリダイレクトされます (動作例は から借用django.contrib.flatpages)。

4

3 に答える 3

2

1.3で正しく動作します:

class TestView(DetailView):
    def get(self, request, **kwargs):
        import ipdb; ipdb.set_trace()

ipdb> request.user
<User: zk>
ipdb> request.user.is_authenticated()
True

おそらくバグ?

于 2011-08-21T14:59:55.047 に答える
1

のデコレータを使用してみてくださいdjango.contrib.auth.decorators。ではurls.py、次のようなことができます。

from django.contrib.auth.decorators import login_required

...
url(r'^something/?$', login_required(MyDetailView.as_view()))
...

premissions_required権限を確認するには、デコレータを使用できます。詳細については、ドキュメントを確認してください: https://docs.djangoproject.com/en/dev/topics/auth/#the-login-required-decorator

于 2011-08-21T14:34:35.460 に答える