質問

ログインするには、スーパーユーザーのみが必要なdjangoページを作成しました。だから私は追加しました

foo_view = staff_member_required(foo_view)

しかし、カットされません。今では、マークされたユーザーのみがログインできるように制御できますが、これはカットされません。私は次のようなものを試しました

def foo_view(request):
       if not request.user.is_superuser:
           #render some "not allowed page"
       #else render the page

しかし、それは私にエラーを与える助けにはならないようです。

役に立ちましたか?

解決

試してください:

from django.contrib.auth.decorators import user_passes_test

def foo_view(request):
    # ...
foo_view = user_passes_test(lambda u: u.is_superuser)(foo_view)

または(Python> = 2.4の場合):

from django.contrib.auth.decorators import user_passes_test

@user_passes_test(lambda u: u.is_superuser)
def foo_view(request):
    # ...

他のヒント

あなたが提案したコードは私にとって完璧に機能します。私はDjango 1.4以降の多くのプロジェクトでそれを使用しました:

from django.contrib.auth.decorators import login_required
from django.http import HttpResponse

@login_required
def foo_view(request):
   if not request.user.is_superuser:
       return HttpResponse('The user is not superuser')

   # Do whatever you need to do

このコードは、少なくともDjango 1.4から1.7以降で私には最適です。

上記の回答は、ごく初期のバージョンのdjango向けです。より新しいバージョンよりも少し複雑です

django 1.11の場合、これは少し似ていますが、より単純な戦略です。 ここをクリック

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top