我已经添加了这个装饰,以我的观点一个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