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響應的流程圖如下:

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 框架原理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章