Django框架介绍

django框架--底层架构

Django小白入门到实战教程(2020)

一、对于web服务的理解

web服务应该至少包含两个模块:web服务器和web应用程序,两个模块在功能和代码上解耦。
web服务器负责处理socket调用http数据解析和封装等底层操作
web应用程序负责业务处理、数据增删改查、页面渲染/生成等高层操作

二、对于wsgi协议的理解

web服务器和web应用程序之间需要定义一个接口规则,这也叫协议,用于明确两者之间以什么样的形式交互数据。即:web服务器应该以什么样的形式调用web应用程序,而web应用程序又应该定义成什么形式。

python下规定的web服务的接口规则叫做wsgiwsgi协议对于serverapplication的接口定义如下:

对于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',]

只要是遵从如上形式进一步封装serverapplication的,均称为实现了wsgi协议的server/application

python内置提供了一个wsigref模块用于提供server,但是只能用于开发测试,django框架就是使用此模块作为它的server部分,也就说,实际生产中的server部分,还需要使用其他模块来实现。

任何web框架,可能没有实现server部分或者只实现一个简单的server,但是,web框架肯定实现了application部分。

application部分完成了对一次请求的全流程处理,其中各环节都可以提供丰富的功能,比如请求和响应对象的封装、model/template的实现、中间件的实现等,让我们可以更加细粒度的控制请求/响应的流程。

 

三、自定义一个简单的基于wsgi协议的web框架

 

 

用以下图示表示简单的web请求流程架构(伪代码)

web服务器就像是一颗心脏不停的跳动,驱动整个web系统为用户提供http访问服务,并调用application返回响应

 

 

四、django中的server实现

django使用的底层server模块是基于python内置的wsgiref模块中的simple_server,每次django的启动都会执行如下run函数。run函数中会执行serve_forever,此步骤将会启动socket_server的无限循环,此时就可以循环提供请求服务,每次客户端请求到来,服务端就执行django提供的application模块。

djangoserver的启动----django.core.servers.basehttp.py

底层无限循环将作为web服务的主要驱动----socektserver.py

五、django中的application实现

djangoapplication模块是通过WSGIHandler的一个实例来提供的,此实例可以被call,然后根据wsgi的接口规则传入environstart_response

所以本质上,django就是使用的内置python提供的wsgiref.simple_server再对application进行丰富的封装。大部分的django编码工作都在application部分。

六、django的底层调用链

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-05-24 12:09  素染年华  阅读(1898)  评论(0编辑  收藏  举报