首页 > 其他分享 >Django请求的生命周期

Django请求的生命周期

时间:2023-01-14 22:11:37浏览次数:65  
标签:生命周期 HTTP 请求 Request middleware 中间件 Django django

我们先来简单介绍一下 Django 是如何处理网络请求的。所有的网络请求,都是从 Request 开始,以 Response 结束。Django 的作用就是把来自客户端的 Request 经过处理,返回 Response。 完整的处理流程可以参考下图:
img

这里我们可以看到,绿的的箭头代表处理 HTTP Request 的工作流走向,红色的箭头代表处理 HTTP Response 的工作流走向。

首先,HTTP Request 是来自客户端,这里的客户端不仅仅是浏览器,也有可能是终端程序,还有可能是其它程序发送的网络请求,我们统称这些为客户端。

客户端发送网络请求, WSGI 首先接受处理。这里的 WSGI 全称是 Web Server Gateway Interface,是 Python 定义的 WSGI 程序和 WSGI 服务器之间的一种接口。项目中的 Peekpa/wsgi.py 里的代码就是实现的这个功能。它会将对网络请求做一次封装,然后将结果传递给 Django 中间件。

接着 Django 中间件接受用户请求,中间件的代码配置位置是在 项目名/settings.py 文件中的 MIDDLEWARE 变量:

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',
]

如上所示的中间件列表,它有很强的顺序性。这里只要记住一点: 处理 HTTP Request 是按照序列从 0 开始,一直到最后一个元素,依次按顺序处理;处理 HTTP Response 是按照从最后一个元素开始,0 号元素结尾,依次按顺序处理。这里的中间件我们会在之后的实验详细讲解。

当中间件处理完 HTTP Request 之后,Resquest 就来到了路由系统。这个其实就是我们的 项目名字/urls.py 文件。但是伴随着开发的进行,我们的路由配置文件可能还会细化到每个 Django App 中。

当 HTTP Request 根据自己的 URL path 找到了匹配的视图函数,它就会被交给指定的视图函数进行处理。在视图函数这里,程序有可能需要通过 ORM 和数据库交互,也有可能直接返回 HTML 模板数据。

视图函数处理完成之后,它会返回一个 HTTP Response 给中间件。

中间件再遵循我们上面说的,一层一层处理 HTTP Response,最终传递给 wsgi,然后 wsgi 返回给用户。

这样, Django 的一次请求就完成了。

标签:生命周期,HTTP,请求,Request,middleware,中间件,Django,django
From: https://www.cnblogs.com/lazarus235/p/17052673.html

相关文章

  • spring boot——请求与参数校验——spring-mvc——通过 HttpServletRequest 获取请求
    我们可以在控制器方法中设置一个HttpServletRequest类型的形参, SpringMVC会自动将请求中携带的参数封装到HttpServletRequest形参中, 然后我们就可以通过HttpS......
  • Django-scrapy图书爬取分析展示系统
    Django-scrapy图书爬取分析展示系统pythonDjango-scrapy图书数据分析展示系统pythonDjangoscrapy数据爬取系统pythonDjango数据分析系统后端:scrapy获取图书数据......
  • Python django 在线练习考试系统
    Pythondjango在线练习考试系统Pythondjango考试系统Pythondjango试卷系统前端:html css js后端:Python django数据库:MySQL功能涉及:登录,注册,登出,添加试卷,添......
  • Python django 汽车商城
    Pythondjango汽车商城汽车系统在线商城二手汽车网汽车网站django汽车推荐商城技术:Python  django数据库:MySQL前端:html  css  js涉及功能:登录,注册,登出,......
  • python Django 运维设备管理系统
    pythonDjango运维设备管理系统pythonDjango电脑管理系统pythonDjango资产管理系统python公司电脑管理系统python公司数据库管理系统 后端语言:python+Djan......
  • SAP STMS传输请求报错无法重新传输请求
    1.问题描述  在传输请求号的时候,第一次传输到测试系统是传输一半,报错;用表E070取消传输后,再次传输报错该请求号已经传输,无法再次传输。2.解决方案  把这个请求重新加入......
  • http 请求头 content-type 字段值
    Content-type定义了http请求的数据类型。如果设置在请求头中,则定义的是请求体的数据类型;如果设置在响应头中,则定义的是响应体的数据类型;请求头--Request-Headers:一般......
  • python Django酒店管理系统
    pythonDjango酒店管理系统pythonDjango停车场管理系统python酒店员工管理系统后端:python3.7+Django前端:html js css等数据库:MySQL功能:管理员登录、员工管理......
  • OKHttpUtil搞定Http请求
    一、OKHttpUtil功能根据URL自动判断是请求HTTP还是HTTPS,不需要单独写多余的代码。默认情况下Cookie自动记录,比如可以实现模拟登录,即第一次访问登录URL后后续请求就是登......
  • python django 医院挂号系统
    pythondjango医院挂号系统pythondjango挂号管理系统pythondjango医院挂号管理系统后端:pythondjango数据库:MySQL5.7前端:html cssjs等涉及功能:登陆、退出......