Django身份验证过程

Django身份验证过程,django,django-admin,django-authentication,Django,Django Admin,Django Authentication,我注意到,当我以管理员身份登录时,当我访问非管理员区域时,我不需要重新验证 然而,当我以简单用户身份登录并访问管理区时,Django当然会检查我是否是管理员 这张支票发生在哪里?我想限制版主访问非管理部分的网站,所以需要检查。 谢谢。您有在视图或模板中检查此项的功能。如果您需要在模板中执行此操作,则用户位于{{request.user}中,也在您的视图中使用请求。用户使用装饰器: from django.contrib.auth.decorators import user_passes_tes

我注意到,当我以管理员身份登录时,当我访问非管理员区域时,我不需要重新验证

然而,当我以简单用户身份登录并访问管理区时,Django当然会检查我是否是管理员

这张支票发生在哪里?我想限制版主访问非管理部分的网站,所以需要检查。 谢谢。

您有在视图或模板中检查此项的功能。如果您需要在模板中执行此操作,则用户位于
{{request.user}
中,也在您的视图中使用
请求。用户使用装饰器:

from django.contrib.auth.decorators import user_passes_test

def not_staff_user(user):
    return not user.is_staff

@user_passes_test(not_staff_user)
def my_view(request):
    ...
如果要限制除
/admin/
之外的所有页面,则中间件是一个不错的选择:

from django.conf import settings
from django.shortcuts import redirect

class NonStaffMiddleware(object):

    def process_request(self, request):
        if request.user.is_staff and not \
               (request.path.startswith('/admin/') or
                request.path.startswith(settings.LOGIN_URL) or
                request.path.startswith(settings.LOGOUT_URL)):
            return redirect(settings.LOGIN_URL)

不是很方便,因为我需要在每个视图中检查这个。我认为应该在中间件中进行更改。这不是很方便,因为我需要在每个视图中检查这一点。我认为应该在中间件中进行更改。这并不能解决问题,因为重定向到登录页面不会注销。然而,我有了这个想法。另外,我不喜欢硬编码request.path.startswith(“/admin/”)的想法