python-Django 的请求生命周期、中间件 Middleware的作用

135 阅读1分钟

请求过程

image.png

step1

当用户在浏览器中输入 url 时,浏览器会生成请求头 (request head) 和请求体 (request body) 发给服务端。

  • 请求头和请求体中会包含浏览器的动作 (action),这个动作通常为 GET 或者 POST;

step2 选择URLconf模块

url 经过 Django 中的 wsgi,再经过 Django 的中间件,最后 url 到过路由映射表。

Django 确定使用根 URLconf 模块。

  • 通常,这是 ROOT_URLCONF 设置的值,
  • 但如果传入 HttpRequest 对象拥有 urlconf 属性(通过中间件设置)
    • 它的值将被用来代替 ROOT_URLCONF 设置

举例 如果中间件(身份认证组件) 校对失败, 会修改url的请求路径

具体中间件介绍可以参考 juejin.cn/post/730191…

step3 正则匹配 url

Django 加载该 Python 模块并寻找可用的 urlpatterns 。它是 django.urls.path() 和 (或) django.urls.re_path() 实例的序列;

step4

Django 依次匹配每个 URL 模式,在与请求的 URL 匹配的第一个模式停下来;

我们使用 urls.py 去定义 URL 路由映射,另外,在每一级 APP 下又有它们独立的 urls.py

step5 视图函数处理请求

视图函数根据客户端的请求查询相应的数据返回给 Django server 然后 Django 把客户端想要的数据做为一个字符串返回给客户端。

客户端浏览器接收到返回的数据,经过渲染后显示给用户;

step6

如果没有 URL 被匹配,或者匹配过程中出现了异常,Django 会调用一个适当的错误处理视图

在处理 request 和 reponse 的过程中,中间件 Middleware 的作用是什么?