Django框架背后是如何运作的?
这个问题可能听起来有点傻,提前道歉。
我想了解一下Django框架在后台是如何工作的。我的理解是,Django并不是一直在运行,而是在有请求进来的时候,通过uwsgi、gunicorn或其他工具被调用,然后按照以下步骤处理请求:
- WsgiHandler或ModPythonHandler
- 导入设置和自定义异常
- 加载中间件
- 中间件 -> URL解析器
- 中间件 -> 视图 -> 模板
- 中间件 -> HttpResponse
但我不太明白的是,Django中是否有某些部分是一直在运行的,比如缓存管理或者其他功能,而不是每次请求都重新创建实例。如果能稍微解释一下或者给点提示,我会非常感激。
1 个回答
4
你没有说明你的“理解”来自哪里,但其实这并不太准确。Django本身对它是如何运行的并没有特别的要求,这主要取决于服务器。不过,Django在每次请求时从头开始运行是非常不寻常的。唯一会这样做的方法是CGI,但那样运行会非常慢。
简单来说,Django可以通过两种方式运行。第一种是它在网页服务器的进程内部运行,比如在Apache上使用mod_wsgi;第二种是它在一个完全独立的进程中运行,通过反向代理从服务器接收请求,比如使用uwsgi或gunicorn。无论哪种方式,Django进程的生命周期和请求并不是直接相关的,而是可以持续处理多个请求。以mod_wsgi为例,服务器会启动线程和/或进程(具体取决于配置),每个线程或进程会处理很多连续的请求,然后才会被杀掉并重启。
对于每个进程来说,这意味着已经加载的模块会在进程的生命周期内一直保留在内存中。从中间件开始的所有内容在每次请求时只会被“执行”一次,但通常不需要每次都重新导入和运行。