美文网首页
Django的Middleware中间件之登陆验证

Django的Middleware中间件之登陆验证

作者: kris_lp | 来源:发表于2018-05-07 21:39 被阅读0次

一、关于中间件

在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。中间件有四种方法,如下:

a)process_request

在处理url之前进行逻辑处理

b)process_view

调用views视图之前执行

c)process_templates_response

在视图刚好执行完的时候调用

d)process_response

在响应返回浏览器之前调用

二、实例:登陆验证

1.创建中间件类

中间件类文件一般都存于目录utils中。中间件类需要继承MiddlewareMixin类,根据需要重构四种方法,此处重构process_request方法。

from django.http import HttpResponseRedirect
from django.utils.deprecation import MiddlewareMixin

from axf_app.models import UserModel


class UserLoginMiddleware(MiddlewareMixin):

    def process_request(self, request):
        # 若请求的是登陆和注册页面 则往下执行
        if request.path == '/axf/login/' or request.path == '/axf/regist/':
            return None
        ticket = request.COOKIES.get('ticket')
        # 若浏览器中不存在ticket 说明用户未登陆 跳转登陆页面
        if not ticket:
            return HttpResponseRedirect('/axf/login/')
        users = UserModel.objects.filter(ticket=ticket)
        # 若浏览器中存在ticket 但用户表中没有和其匹配的ticket 
        # 说明用户未登陆 跳转登陆页面
        if not users:
            return HttpResponseRedirect('/axf/login/')
        request.user = users[0]

注意:如果没有加入第一个if中的路径判断,那么服务器会一直请求login,导致重定向次数过多,所以第一个if判断必须写。

2.注册中间件

在setting.py文件中 MIDDLEWARE 中加上自己写的中间件

MIDDLEWARE = [
    'utils.UserMiddleware.UserLoginMiddleware',
]

相关文章

网友评论

      本文标题:Django的Middleware中间件之登陆验证

      本文链接:https://www.haomeiwen.com/subject/qnfbrftx.html