我已經添加了這個裝飾,以我的觀點一個Django permission_required錯誤消息?
@permission_required('codename')
當用戶訪問該網頁並沒有所需的權限,他將被重定向登錄頁面,但它並沒有真正告訴他爲什麼他被重定向到那裏。更糟的是,如果他登錄,並且仍然沒有權限,他將完全無法知道他爲什麼不能訪問該頁面!
是不是有一種方法可以利用消息框架並同時發佈錯誤?
我已經添加了這個裝飾,以我的觀點一個Django permission_required錯誤消息?
@permission_required('codename')
當用戶訪問該網頁並沒有所需的權限,他將被重定向登錄頁面,但它並沒有真正告訴他爲什麼他被重定向到那裏。更糟的是,如果他登錄,並且仍然沒有權限,他將完全無法知道他爲什麼不能訪問該頁面!
是不是有一種方法可以利用消息框架並同時發佈錯誤?
您可以敲入消息框架並提供錯誤消息。請參閱my answer以得到相同的問題。
您可以在此裝飾器中使用login_url參數重定向到其他頁面,而不是登錄頁面。或者你也可以根據從Django的代碼只需編寫自己的裝飾:
def permission_required(perm, login_url=None):
"""
Decorator for views that checks whether a user has a particular permission
enabled, redirecting to the log-in page if necessary.
"""
return user_passes_test(lambda u: u.has_perm(perm), login_url=login_url)
簡單地改變login_url
一些redirect_to
,並不會造成任何混亂。
使用@permission_required_or_403('codename')
這將用戶重定向到一個403「權限被拒絕」的錯誤頁面。
這個裝飾器沒有在Django文檔 – 2012-09-18 14:47:33
不知道你正在使用的,但在Django 1.4是什麼版本的Django的更高,你可以使用:
from django.contrib.auth.decorators import permission_required
@permission_required('app.permission',raise_exception=True)
def myView(request):
#your view code
這將引發403例外,如果你的基地有一個403.html頁面你的模板文件夾,它將服務器了。
如果你正在使用基於類的觀點:
from django.views.generic.base import View
from django.contrib.auth.decorators import permission_required
from django.utils.decorators import method_decorator
class MyView(View):
@method_decorator(permission_required('app.permission',raise_exception=True)
def get(self, request):
#your GET view
希望這有助於。
看起來像是重複的http://stackoverflow.com/questions/1251151/how-can-make-django-permission-required-decorator-not-to-redirect-already-logged – 2010-08-10 17:08:45