Django请求生命周期是指:

用户浏览器输入URL到用户看到网页这个时间段内,Django后台所发生的事情。

直白的来说就是请求来的时候请求走的阶段中,Django执行轨迹。

一个完整的Django生命周期:

  1. 用户客户端发出一条请求以后,首先会基于http协议解析数据封装
  2. 然后来到Nginx处理(nginx监听公网ip某个端口,接到请求后,如果是静态资源nginx直接获取资源返回给用户,如果是动态资源nginx就将请求转发到uWSGI,使用协议一般是uwsgi),
  3. uWSGI接收请求以后,通过http协议转化为WSGI协议,和Django之间进行通信
  4. 此时,该条请求就真正的来到了后端之上,首先它会经过Django的第一道工序:中间件,(而所谓中间件简单来说就是请求来和请求走的时候Django增加的一道工序,请求来和请求走的时候都要先经过中间件处理,因此,也可以中间件理解为Django提供的额外功能组件),
  5. 在经过中间件以后,来到Django的第二道工序:路由层(urls.py)去筛选匹配符合符合请求命令后缀地址
  6. 然后根据匹配到的地址去Django第三道工序:视图层(views.py)找到对应视图函数/视图类里的属性
  7. 之后去到第四道工序:模型层(models.py)通过orm操作数据库获取数据,拿到数据以后回到视图层(views.py)里对数据进行处理(序列化和反序列化),
  8. 处理后的数据返给Django的第五道工序:模板层(Templates),模板接收数据后,对数据进行渲染,之后再次经过视图层、路由层、中间件、uWSGI服务器、Nginx代理
  9. 最后渲染的数据返还给客户端进行展示
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  1. 浏览器django服务器发起请求

  2. 路由系统url.py

    1. 通过正则匹配url
    2. 交由视图系统views.py),调用对应方法处理数据
  3. 中间件

    1. 全局生效(所有方法需要先由中间件处理)
  4. 视图系统views.py

    1. 是否需要根据post get请求, 区分处理方式
    2. 处理数据
    3. 返回结果
  5. templates

    1. 直接返回页面
    2. 数据处理后返回页面
  6. 层层返回给浏览器

简单的说就是django生命周期是:前端请求—>nginx—>uwsgi.—>中间件—>url路由—->view视图—>orm—->拿到数据返回给view—->视图将数据渲染模版中拿到字符串—->中间件—>uwsgi—->nginx—->前端渲染

Django 请求的生命周期主要分为如下四个阶段

  1. WSGI 应用初始化
  2. URL 路由匹配
  3. Django View 函数执行
  4. 返回响应

接着,我们将逐一对这四个阶段进行详细讲解

  1. WSGI 应用初始化

当 WSGI 服务器启动 Django 应用程序时,将调用 Django 的自带 WSGI 应用程序处理器应用程序加载内存中,并在内存设定一些全局变量,如 settingsmiddleware 等。这些全局变量可以由 Django 应用程序应用程序的中间件共同使用。

其中,settings 是 Django 应用程序中最重要的全局变量。它包含了除了 URL 路由跳转之外的所有应用程序配置信息例如本地数据库 URL,模板引擎设置调试开关等。middleware 则是一个提供额外功能组件可以视图函数的请求和响应进行扩展

以下是 WSGI 应用的初始化代码段

def get_wsgi_application():
    django.setup(set_prefix=False)
    return WSGIHandler()

get_wsgi_application() 函数用于实例一个 WSGI 应用程序对象,并返回 WSGI 请求处理器对象。Django 在这里进行重要的初始化操作。

  1. URL 路由匹配

一旦 WSGI 应用程序在内存设置好了,它将自动提供视图,即 URL 映射到相应的处理程序。在 Django 中,URLs 通过一个名为 urls.py文件进行定义管理。当一个客户端请求到达 Django 时,它将映射到 urlpatterns 变量中的可调用视图函数上。

以下是一个 URL 映射器的示例

from django.urls import path
from . import views

urlpatterns = [
    path('about/', views.about),
    path('contact/', views.contact),
]

这里,URL “/about/” 和 “/contact/” 路径将使用 views.about 和 views.contact 函数来处理请求。

匹配 URL 时,Django 会按顺序依次尝试匹配每个 URL 规则,并使用第一个匹配的 URL 规则。如果没有规则匹配请求的 URL 路径,则 Django 允许你定义一个捕获所有情况的通配符 URL 规则,即使用 path() 函数的 ‘path:’ 参数

urlpatterns = [
    path('about/', views.about),
    path('contact/', views.contact),
    path('<path:slug>/', views.page_not_found),
]

这个示例中,Django 将试图匹配 “/about/” 和 “/contact/”,但无论它们能否成功匹配,最终都会跳转views.page_not_found 函数上。

  1. Django View 函数的执行

如果 Django 能够正确地将请求 URL 映射一个视图函数上,则该视图函数将被执行。视图函数是 Django MVC 模型中的控制器,它处理请求并返回响应

以下是一个视图函数的示例

from django.shortcuts import render

def index(request):
    return render(request, 'index.html')

这个示例中,index 视图函数将会渲染 index.html 模板,并将结果用 HTTP 响应的形式返回给客户端

Django 将请求对象作为视图函数的第一个参数传递,并在对象中提供了用于访问请求数据和其他属性方法属性。视图函数还可以访问请求参数和其他内置对象(如 settingsmiddleware)。

  1. 返回响应

当视图函数处理请求,并生成响应后,Django 将响应发送客户端(通常是浏览器)。响应内容可以是可选的,Django 可以生成基于文本(HTML,JSON,XML 等)的响应,或者基于非文本例如使用文件响应)的响应。

Django 提供了一组给用户访问的响应对象,并允许定制 HTTP 响应头。默认情况下,Django 使用 HttpResponse。HttpResponse 接受以下两类参数

原文地址:https://blog.csdn.net/weixin_53909748/article/details/132580392

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_45616.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注