Django的Middleware中间件之登陆验证

一、关于中间件

在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',
]
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容