view.py如何將視圖限制爲超級用戶?
@login_required
@permission_required('is_superuser')
def score_reset(request):
pass
url.py
url(r'^score-reset/$', score_reset, name='score-reset'),
我有下面的代碼讓我吃驚我還是打的功能,儘管被記錄在與非超級用戶。我期待得到一個許可被拒絕。
我錯過了什麼?
view.py如何將視圖限制爲超級用戶?
@login_required
@permission_required('is_superuser')
def score_reset(request):
pass
url.py
url(r'^score-reset/$', score_reset, name='score-reset'),
我有下面的代碼讓我吃驚我還是打的功能,儘管被記錄在與非超級用戶。我期待得到一個許可被拒絕。
我錯過了什麼?
is_superuser
不是權限,它是用戶模型上的屬性。 Django中已經有另一個decorator you can make use of called user_passes_test
執行該檢查:如果你想在衆多的意見進行這樣的檢查
from django.contrib.auth.decorators import user_passes_test
@user_passes_test(lambda u: u.is_superuser)
def score_reset(self,...):
...
@user_passes_test不是一個完美的解決方案。 你可以很容易地寫你自己的decorathor例如@staff_member_require。
Here您可以看到其中一種可能的解決方案。
以上答案似乎是非常早期的django版本。 它們比稍後版本更復雜
對於django 1.11這裏有點類似但更簡單的策略。
views.py
from django.contrib.auth.decorators import login_required
@login_required
def some_view(request):
if request.user.is_superuser:
//allow access only to superuser
return render(request, 'app/template1.html', args)
else:
//allow access only to user
return render(request, 'app/template2.html', args)
順便說一句,我不是標誌着這是因爲無論答案我已經掛一提的是'user_passes_test'是現有的Django裝飾以及一個事實,即'is_superuser重複'不是權限 –
問題只限於超級用戶。示例代碼應該是@user_passes_test(lambda u:u.is_superuser) – mhost
使用'user_passes_test' [上面的代碼片段]完成這項工作。但是您可能想要考慮這將會重定向到所有非超級用戶的登錄頁面,即使他們已經登錄。你可能想編寫自己的裝飾器來完成工作。 – allsyed