django中间件 请求生命周期

1.中间件是干什么用的?

  它是对所有请求和响应做一些统一处理,是介于request与response之间的一道处理过程,它相对比较轻量级,并且在全局上改变django的输入与输出。

中间件的应用场景

1、做IP访问频率限制

某些IP访问服务器的频率过高,进行拦截,比如限制每分钟不能超过20次。

2、URL访问过滤

如果用户访问的是login视图(放过)

如果访问其他视图,需要检测是不是有session认证,已经有了放行,没有返回login,这样就省得在多个视图函数上写装饰器了!

 

自定义中间流程:

1 在应用中创建一个py文件,比如 mymiddleware.py

2 py文件中写如下内容

from django.shortcuts import redirect,HttpResponse,render
from django.utils.deprecation import MiddlewareMixin   # django提供的中间件初始类

# 登录认证中间件
class LoginAuth(MiddlewareMixin):  # 继承这个类
    # 白名单
    white_list = ['/login/', '/register/']


    # 对请求处理用process_request, 如果请求通过了处理,就return None,如果没有通过直接return HttpResponse对象
    def process_request(self,request):

        current_path = request.path
        if current_path not in self.white_list:
            status = request.session.get('is_login')
            if not status:
                # return HttpResponse('ok')  #如果return 的是一个HttpResponse对象,那么中间件执行到这里,直接返回
                return redirect('login')

        print('请求它来啦!!!')

3.

 

 

 

 

1.浏览器发送一个请求,wsgi封装的socket接收浏览器发来的请求,并且按照http协议的格式进行解包,解包完成之后封装成一个request对象

2.然后把request对象交给中间件处理,中间件处理完成之后再交给url控制器找到路径执行对应的视图函数进行处理

3.视图函数处理完成之后再响应,响应内容依次倒序通过每一个中间件

4.最后再交给wsgi通过http协议封装响应数据返回给浏览器 

 

django自带的中间件

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',   
    'django.contrib.sessions.middleware.SessionMiddleware', #封装session功能的 ,request.session['xx'] ='oo'
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

 

posted @ 2021-06-08 11:31  urls  阅读(117)  评论(0)    收藏  举报