Django 框架幕后工作原理

试图理解 Django 框架的幕后工作原理。理解 Django 不会一直运行,当请求到达并按如下方式处理时,它会被 uwsgi/gunicorn 或其他内容调用:
在这里插入图片描述

WsgiHandler 或 ModPythonHandler
导入设置、自定义异常
加载中间件
中间件 -> URL 解析器
中间件 -> 视图 -> 模板
中间件 -> HTTP 响应

但无法理解的是,是否有一部分 Django 会一直运行,例如缓存管理或其他功能或实例,而不是每个请求创建。希望你能够解释一下或提供提示。

2、解决方案

“理解”的来源不明确,但它并不完全准确。Django 本身对其运行方式并不是很严格,它取决于服务器,但每个请求都从头开始调用它并不常见。唯一可能是这种情况的方法是 CGI,而且它的运行速度非常慢。
总体来说,Django 框架有两种运行方式。它可以在 Web 服务器进程内部运行,例如 Apache 上的 mod_wsgi,也可以在完全独立的进程中运行,并通过服务器的代理接收请求,例如 uwsgi/gunicorn。无论哪种方式,Django 进程的生命周期与请求没有直接关系,而是跨越许多请求。例如,对于 mod_wsgi,服务器会启动线程和/或进程(具体取决于配置),每个线程和/或进程会持续大量的连续请求,然后被终止并重新启动。
这意味着对于每个进程,已加载的任何模块会在进程的整个生命周期内驻留在内存中。从中间件开始的所有内容都会对每个请求执行一次,但通常不需要每次都重新导入和运行它们。

以下是用于描述 Django 框架幕后工作原理的代码示例:

# wsgi.py
from django.core.wsgi import get_wsgi_application

application = get_wsgi_application()

# urls.py
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]

# views.py
from django.http import HttpResponse

def index(request):
    return HttpResponse('Hello, world!')

当用户向 Django 框架发送请求时,请求将被转发到 wsgi.py 文件。wsgi.py 文件将使用 get_wsgi_application() 函数获取应用程序对象,并将该对象分配给 application 变量。

应用程序对象是一个可调用对象,它接收一个环境字典和一个启动响应函数作为参数。应用程序对象将使用环境字典中的信息来处理请求,并将响应返回给启动响应函数。

请求的 URL 将与 urls.py 文件中的 URL 模式进行匹配。匹配成功的 URL 模式将调用与之关联的视图函数。

视图函数将处理请求并返回一个响应对象。响应对象将被发送回客户端。

在 Django 框架中,中间件是一个可插入的组件,它可以在请求到达视图函数之前或之后运行。中间件可以用于执行各种任务,例如身份验证、缓存和日志记录。

Django 框架还提供了一个模板系统,用于生成动态 HTML 页面。模板系统使用一种称为 Django 模板语言 (DTL) 的模板语言。DTL 模板可以包含变量、条件语句和循环。

当请求到达 Django 框架时,它将被转发到适当的视图函数。视图函数将处理请求并返回一个响应对象。响应对象将被发送回客户端。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值