Django框架介绍
django框架--底层架构
Django小白入门到实战教程(2020)
一、对于web服务的理解
web
服务应该至少包含两个模块:web
服务器和web
应用程序,两个模块在功能和代码上解耦。web
服务器负责处理socket
调用、http
数据解析和封装等底层操作。web
应用程序负责业务处理、数据增删改查、页面渲染/生成等高层操作。
二、对于wsgi协议的理解
在web
服务器和web
应用程序之间需要定义一个接口规则,这也叫协议,用于明确两者之间以什么样的形式交互数据。即:web
服务器应该以什么样的形式调用web应用程序,而web
应用程序又应该定义成什么形式。
python
下规定的web
服务的接口规则叫做wsgi
,wsgi
协议对于server
和application
的接口定义如下:
对于server
调用规则的定义:
response = application(environ, start_response)
对于application
接口编码的定义:
def application(environ, start_response):
status = '200 OK'
response_headers = [('Content-Type', 'text/plain'),]
start_response(status, response_headers)
return [b'hello',]
只要是遵从如上形式进一步封装server
和application
的,均称为实现了wsgi
协议的server/application
。
python
内置提供了一个wsigref
模块用于提供server
,但是只能用于开发测试,django
框架就是使用此模块作为它的server
部分,也就说,实际生产中的server
部分,还需要使用其他模块来实现。
任何web
框架,可能没有实现server
部分或者只实现一个简单的server
,但是,web
框架肯定实现了application
部分。
application
部分完成了对一次请求的全流程处理,其中各环节都可以提供丰富的功能,比如请求和响应对象的封装、model/template
的实现、中间件的实现等,让我们可以更加细粒度的控制请求/响应的流程。
三、自定义一个简单的基于wsgi协议的web框架
用以下图示表示简单的web请求流程架构(伪代码)
web
服务器就像是一颗心脏不停的跳动,驱动整个web
系统为用户提供http
访问服务,并调用application
返回响应
四、django中的server实现
django
使用的底层server
模块是基于python
内置的wsgiref
模块中的simple_server
,每次django
的启动都会执行如下run
函数。run
函数中会执行serve_forever
,此步骤将会启动socket_server
的无限循环,此时就可以循环提供请求服务,每次客户端请求到来,服务端就执行django
提供的application
模块。
django
中server
的启动----django.core.servers.basehttp.py
底层无限循环将作为web
服务的主要驱动----socektserver.py
五、django中的application实现
django
的application
模块是通过WSGIHandler
的一个实例来提供的,此实例可以被call
,然后根据wsgi
的接口规则传入environ
和start_response
。
所以本质上,django
就是使用的内置python
提供的wsgiref.simple_server
再对application
进行丰富的封装。大部分的django
编码工作都在application
部分。
六、django的底层调用链
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库