我已将此装饰器添加到我的一个视图中
@permission_required('codename')
当用户访问该页面并且没有所需权限时,他会被重定向到登录页面,但它并没有真正告诉他为什么他被重定向到那里。更糟糕的是,如果他登录,并且仍然没有权限,那么他将无法理解为什么他无法访问该页面!
我是否有办法点击消息框架并同时发布错误?
答案 0 :(得分:3)
不确定您使用的是哪种版本的Django,但在Django 1.4及更高版本中您可以使用:
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
希望这有帮助。
答案 1 :(得分:2)
使用@permission_required_or_403('codename')
这会将用户重定向到403'权限被拒绝'错误页面。
答案 2 :(得分:1)
您可以在此装饰器中使用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
,就不会造成任何混淆。
答案 3 :(得分:1)
您 可以 点按消息框架并提供错误消息。请参阅my answer相同的问题。