django请求响应的生命周期简介
浏览器发送请求,通过web服务网管接口(wsgiref)封装解析成request,经过django的中间件(默认7个中间件,可自定义中间件,从上至下),经过urls.py进行路由的解析,到达对应的视图函数,视图函数和templates、models进行数据的处理和交互显示,视图函数处理完成之后返回request对象,依次通过urls.py,django的中间件(从下至上),web服务网关接口返回给浏览器。
django中间件介绍
官方说法:中间件是一个用来处理django请求和响应的框架级别的钩子,它是一个轻量、低级别的插件系统,用于在全局范围内改变django的输入输出。每个中间件组件都负责一些特定的功能。
说的直白一点就是在执行是视图函数之前和执行之后,可以做一些额外的操作。它的本质上就是一个自定义的类,类中定义几个方法,django会在请求的特定时间去执行这些方法。
从我们安装和运行django框架开始我们就在是有中间件,可能只是没有注意而已。
默认的django中间件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
django中间件在请求的时候是从上至下执行的,在响应的时候是从下至上的
自定义中间件
新建一个文件夹,在文件夹中新建一个middleware.py文件
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse,render
class MyMiddleWare(MiddlewareMixin):
def process_request(self,request):
print('我是第一个自定义的中间件中process_request方法')
# return HttpResponse('我是第一个中间件里面返回的对象')
# return render(request, 'index.html')
def process_response(self,request,response):
print('我是第一个自定义的中间件中process_response方法')