一个请求在 Django 中的处理流程:
浏览器
| 构建 HTTP 请求报文
| User Request: http://swiper.cn/api/user/show
v
域名解析
| swiper.cn -> 11.22.33.44
v
向服务器建立网络连接: TCP 3 次握手
^
|
v
HTTP Server
| 1. 与客户端建立连接
| 2. 接收客户端数据
v
WSGI (Web Server Gateway Interface)
| 将 “HTTP 请求报文” 封装成 HttpRequest 对象
|--------------------------------------> process_request (中间件)
v
Django 进行 URL 映射, 匹配到一个视图函数
|
|--------------------------------------> process_view (中间件)
v
View 视图处理
| | 1. 参数处理
| | 2. 逻辑处理
| | 3. 数据处理
| | 4. 模板渲染 ----------------------> process_template (中间件)
| | 5. 将结果封装成 HttpResponse 对象
| |
| ------------------------------------> process_exception (中间件,捕获视图函数的异常,1-5过程有任何异常就跳过来)
|
|--------------------------------------> process_response (中间件)
v
WSGI
| 将 HttpResponse 对象封装成 “HTTP 响应报文”
v
HTTP Server
| 1. 将 “HTTP 响应报文” 发送给客户端
| 2. 断开与客户端的连接 (四次挥手)
v
浏览器
django 的工作机制:
1.用manage.py runserver 启动Django服务器时就载入了在同一目录下的settings.py。该文件包含了项目中的配置信息,如URLConf等,其中最重要的配置就是ROOT_URLCONF,它告诉Django哪个Python模块应该用作本站的URLConf,默认的是urls.py
2.当访问url的时候,Django会根据ROOT_URLCONF的设置来装载URLConf。
3.然后按顺序逐个匹配URLConf里的urlpatterns。如果找到则会调用相关联的视图函数,并把HttpRequest对象作为第一个参数(通常是request)
4.最后该view函数负责返回一个HttpResponse对象。