码迷,mamicode.com
首页 > 其他好文 > 详细

django 框架原理

时间:2019-12-19 11:32:22      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:httpd服务器   forever   start   框架   状态码   httpd服务   封装   django框架   rev   

一、什么是web服务
1.web服务包含两个部分,http服务器,app应用程序.
2.httpd服务器负责解析数据,并封装调用socket请求
3.app应用负责业务逻辑,包括增删改查等操作
4.http服务器一旦接受客户端请求就会解析数据并调用app应用,app解析完数据后返回给http服务,并响应给客户端

二、客户端和web服务通信,web服务和app应用怎么通信
1.客户端和web服务通信
客户端和web服务通信使用http协议
C/S 模型,
request请求包括:
第一部分:请求行
第二部分:请求头
第三部分:空行
第四部分: 请求体
response包括:
第一部分:状态行,由HTTP/1.1(协议版本) 200(状态码) OK(状态码的描述) 构成
第二部分:响应头,由一些键值对构成,用来说明客户端要使用的一些附加信息
第三部分:空行,响应头后面的空行时必须的
第四部分:响应正文,服务器返回给客户端的文本信息

2.web服务和app使用怎么通信
在web服务和app应用之间需要定义一个接口规则,或者叫协议,规定两者之间数据通信方式,即web服务以怎样的方式调用app应用.
python规定,web服务的接口规则是wsgi协议,wsgi协议对于server和app接口定义如下:
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‘,]

只要遵从上述调用方式,均实现了wsgi协议.

python内置了wsgiref模块,用于提供server服务,django使用此模块开发测试,但是生产环境使用其他模块来处理
一次web服务到app响应的流程图如下:

django 框架原理

三、定义一个简单的wsgi服务器框架
django框架的server部分由python内置的wsgiref模块提供,我们只需要编写application应用程序部分
from wsgiref.simple_server import make_server

def app(environ, start_response): # wsgi协议规定的application部分的编码形式,可在此基础上扩展
status = ‘200 OK‘
respones_headers = []

start_response(status, response_headers)
return [b‘hello‘,]
if name == ‘main‘:
httpd = make_server(‘127.0.0.1‘, 8080, app)
httpd.serve_forever()

wsgi框架请求响应流程:
django 框架原理

四、django的server实现
django使用的server是基于python内置的wsgiref模块的simple_server,每次django启动都会执行run函数,run函数会调用server_forver方法,此步骤会执行socket_server的循环执行,这样就能不断监听客户端的请求,server端调用application响应用户请求

五、django的application实现
django的application是通过WSGIhandle的一个实例来实现,此实例可以被回掉,然后根据wsgi的接口规则传入environ和start_response。所以本质上,django就是使用的内置python提供的wsgiref.simple_server再对application进行丰富的封装。大部分的django编码工作都在application部分

六、django调用链
django 框架原理

django 框架原理

标签:httpd服务器   forever   start   框架   状态码   httpd服务   封装   django框架   rev   

原文地址:https://blog.51cto.com/14640776/2459726

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!