2009-09-10 7 views
15

スーパーユーザーのみログインする必要がある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 

しかし、それは私にエラーを与えるのを助けるようではありません。

+0

2番目のコードスニペットではどのようなエラーが表示されますか? –

答えて

48

試してみてください。

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) 

または(パイソン> = 2.4):

from django.contrib.auth.decorators import user_passes_test 

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

+1私の心を読んで:] –

+0

ありがとうドミニク! – Hellnar

+1

@Dominic user_passes_testを使用しようとしましたが、リダイレクトループが発生します。ログインしているユーザーがスーパーユーザーではないため、リクエストを再度ログイン画面にリダイレクトするようです。 –

1

あなたは私のために完璧な作品を提案したコードは、私は、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以降で完璧に動作します。

0

上記の回答はdjangoの非常に初期のバージョンのようです。彼らはより新しいバージョンよりも少し複雑です

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

関連する問題