django 框架原理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django 框架原理相关的知识,希望对你有一定的参考价值。
一、什么是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响应的流程图如下:
三、定义一个简单的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的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 框架原理的主要内容,如果未能解决你的问题,请参考以下文章