标签:ase ring 开发测试 用户 wsgi def tar 使用 伪代码
web
服务应该至少包含两个模块:web
服务器和web
应用程序,两个模块在功能和代码上解耦。web
服务器负责处理socket
调用、http
数据解析和封装等底层操作。web
应用程序负责业务处理、数据增删改查、页面渲染/生成等高层操作。
在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
的实现、中间件的实现等,让我们可以更加细粒度的控制请求/响应的流程。
用以下图示表示简单的web请求流程架构(伪代码)
web
服务器就像是一颗心脏不停的跳动,驱动整个web
系统为用户提供http
访问服务,并调用application
返回响应
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
模块是通过WSGIHandler
的一个实例来提供的,此实例可以被call
,然后根据wsgi
的接口规则传入environ
和start_response
。
所以本质上,django
就是使用的内置python
提供的wsgiref.simple_server
再对application
进行丰富的封装。大部分的django
编码工作都在application
部分。
标签:ase ring 开发测试 用户 wsgi def tar 使用 伪代码
原文地址:https://www.cnblogs.com/liyonghua/p/12950510.html