在linux下django框架,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响应的流程图如下:

26ed298302deaa3f88dffcfc1f2b0503.png

三、定义一个简单的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框架请求响应流程:

987acc7433fcf98545feb6f5001db5f8.png

四、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调用链

d3afb80a6bb28e9d9a23293b031af4c5.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值