我注意到Django的管理区域存在一个有趣的问题。如果我撤销我的员工权限并尝试直接访问/admin
,我通常会希望在查询字符串中将/admin/
重定向到我的登录页面,作为将来的重定向。但是,我得到一个使用HTTP代码200返回的正确页面,它实际上使用我的admin/login.html
模板来呈现所请求的页面而不是重定向。似乎问题出在@staff_member_required
装饰器中,管理员视图显然使用它。
问题是:这是故意的吗?如果没有,如何在没有太多猴子修补的情况下改变这种行为?
答案 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