前言
django是一个web框架,在这之前的文章中,我们推导了python web框架的实现过程,也了解了客户端浏览器输入网址回车后发生了啥事,为了更加理解django的工作流程,本文将介绍客户端浏览器访问django后端在django框架中又发生了哪些事情即django框架的请求生命周期。这也是面试中经常会被问到的问题哦~
WSGI协议 & uwsgi & wsgiref & Gunicorn
在介绍django请求生命周期流程前,需要先了解一些概念。
python web程序一般来说分为两部分,服务器程序和应用程序,服务器程序负责对socket服务器进行封装,并在客户端请求服务端时将客户端请求的各种数据和信息进行整理。应用程序则负责具体的逻辑处理,为了方便应用程序的开发就出现了很多的web框架,Django便是其中之一,服务器程序需要为不同的web框架提供不同的支持,因此就需要一个标准,只要服务器程序和应用程序也就是web框架都支持这个标准,服务器程序就可以web框架之间配合使用,WSGI就是一种规范,它规定了使用python编写的web应用程序与web服务器程序之间的接口格式。
常见的符合WSGI协议的服务器程序有uwsgi,Gunicorn,而django框架自带的服务器程序是wsgiref,当django项目上线时可以更换成uwsgi或者Gunicorn.
django请求生命周期
客户端浏览器向django后端发送请求时需要通过“重重关卡”django后端才能返回给客户端浏览器数据。
客户端浏览器向django服务端发送请求之后,首先回经过web网关接口,将客户端的请求解析成HTTP格式的数据封装到request对象中,解析后的数据回来到应用程序部分,首先会经过django的中间件,django自带了7个中间件,请求来的时候会经过每个中间件中的process_request方法,经过中间件之后才能到达真正的django后端。
请求会经过路由层,在进行路由匹配后执行对应的视图函数,在经过视图函数的业务逻辑后会产生response对象,响应对象也会通过中间件中的每个process_response方法,回到web服务网关接口,将response对象打包成HTTP格式的数据返回给客户端浏览器。
画图解释如下: