溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

django 框架原理

發(fā)布時間:2020-07-21 04:30:39 來源:網(wǎng)絡 閱讀:137 作者:liveyoufo 欄目:系統(tǒng)運維

一、什么是web服務
1.web服務包含兩個部分,http服務器,app應用程序.
2.httpd服務器負責解析數(shù)據(jù),并封裝調用socket請求
3.app應用負責業(yè)務邏輯,包括增刪改查等操作
4.http服務器一旦接受客戶端請求就會解析數(shù)據(jù)并調用app應用,app解析完數(shù)據(jù)后返回給http服務,并響應給客戶端

二、客戶端和web服務通信,web服務和app應用怎么通信
1.客戶端和web服務通信
客戶端和web服務通信使用http協(xié)議
C/S 模型,
request請求包括:
第一部分:請求行
第二部分:請求頭
第三部分:空行
第四部分: 請求體
response包括:
第一部分:狀態(tài)行,由HTTP/1.1(協(xié)議版本) 200(狀態(tài)碼) OK(狀態(tài)碼的描述) 構成
第二部分:響應頭,由一些鍵值對構成,用來說明客戶端要使用的一些附加信息
第三部分:空行,響應頭后面的空行時必須的
第四部分:響應正文,服務器返回給客戶端的文本信息

2.web服務和app使用怎么通信
在web服務和app應用之間需要定義一個接口規(guī)則,或者叫協(xié)議,規(guī)定兩者之間數(shù)據(jù)通信方式,即web服務以怎樣的方式調用app應用.
python規(guī)定,web服務的接口規(guī)則是wsgi協(xié)議,wsgi協(xié)議對于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',]

只要遵從上述調用方式,均實現(xiàn)了wsgi協(xié)議.

python內置了wsgiref模塊,用于提供server服務,django使用此模塊開發(fā)測試,但是生產(chǎn)環(huán)境使用其他模塊來處理
一次web服務到app響應的流程圖如下:

django 框架原理

三、定義一個簡單的wsgi服務器框架
django框架的server部分由python內置的wsgiref模塊提供,我們只需要編寫application應用程序部分
from wsgiref.simple_server import make_server

def app(environ, start_response): # wsgi協(xié)議規(guī)定的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實現(xiàn)
django使用的server是基于python內置的wsgiref模塊的simple_server,每次django啟動都會執(zhí)行run函數(shù),run函數(shù)會調用server_forver方法,此步驟會執(zhí)行socket_server的循環(huán)執(zhí)行,這樣就能不斷監(jiān)聽客戶端的請求,server端調用application響應用戶請求

五、django的application實現(xiàn)
django的application是通過WSGIhandle的一個實例來實現(xiàn),此實例可以被回掉,然后根據(jù)wsgi的接口規(guī)則傳入environ和start_response。所以本質上,django就是使用的內置python提供的wsgiref.simple_server再對application進行豐富的封裝。大部分的django編碼工作都在application部分

六、django調用鏈
django 框架原理

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI