保护网站免受未经身份验证的用户的侵害

Dea*_*dly 1 django django-views

当用户未登录时,应将其重定向到登录页面.

if not request.user.is_authenticated()
    # redirect to the login page
Run Code Online (Sandbox Code Playgroud)

但是必须在每个视图中编写此代码.有一种方法只能为所有视图编写一次公共代码吗?

Chr*_*att 8

又如何@login_required装饰?https://docs.djangoproject.com/en/dev/topics/auth/#the-login-required-decorator

  • 强烈参考[关于Django书中`@ login_required`装饰器的注释](http://www.djangobook.com/en/1.0/chapter12/#cn137). (2认同)

mip*_*adi 5

你可以用一块中间件来做:

class RequireLoginMiddleware(object):
    def process_request(self, request):
        if not request.user.is_authenticated():
            return HttpResponseRedirect('/login/')
        return None
Run Code Online (Sandbox Code Playgroud)

当然,您不希望为登录页面本身执行此操作:

class RequireLoginMiddleware(object):
    def process_request(self, request):
        if request.path.startswith('/login'):
            return None
        if not request.user.is_authenticated():
            return HttpResponseRedirect('/login/')
        return None
Run Code Online (Sandbox Code Playgroud)