如何重定向尝试访问Django管理区域的用户?

时间:2011-09-12 11:30:30

标签: django django-admin

我注意到Django的管理区域存在一个有趣的问题。如果我撤销我的员工权限并尝试直接访问/admin,我通常会希望在查询字符串中将/admin/重定向到我的登录页面,作为将来的重定向。但是,我得到一个使用HTTP代码200返回的正确页面,它实际上使用我的admin/login.html模板来呈现所请求的页面而不是重定向。似乎问题出在@staff_member_required装饰器中,管理员视图显然使用它。

问题是:这是故意的吗?如果没有,如何在没有太多猴子修补的情况下改变这种行为?

1 个答案:

答案 0 :(得分:0)

这是故意这样做的,因为许多人在他们的站点中实现重定向,这可能会阻止对管理面板的访问。因为管理面板是它自己的应用程序,所以它会重定向到自身。

# Put this code somewhere it will be imported REALLY early

from django.contrib.admin.views import decorators

def staff_member_required(view_func):
    """
    Decorator for views that checks that the user is logged in and is a staff
    member, displaying the login page if necessary.
    """
    def _checklogin(request, *args, **kwargs):
        if request.user.is_active and request.user.is_staff:
            # The user is valid. Continue to the admin page.
            return view_func(request, *args, **kwargs)
        else:
            return HTTPResponseRedirect('/my/login/page/')
    return wraps(view_func)(_checklogin)

decorators.staff_member_required = staff_member_required #replaces the function in-place