Django permission_required错误信息?

时间:2010-08-10 16:33:25

标签: django

我已将此装饰器添加到我的一个视图中

@permission_required('codename')

当用户访问该页面并且没有所需权限时,他会被重定向到登录页面,但它并没有真正告诉他为什么他被重定向到那里。更糟糕的是,如果他登录,并且仍然没有权限,那么他将无法理解为什么他无法访问该页面!

我是否有办法点击消息框架并同时发布错误?

4 个答案:

答案 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相同的问题。