一、什么是web服務(wù)
1.web服務(wù)包含兩個(gè)部分,http服務(wù)器,app應(yīng)用程序.
2.httpd服務(wù)器負(fù)責(zé)解析數(shù)據(jù),并封裝調(diào)用socket請(qǐng)求
3.app應(yīng)用負(fù)責(zé)業(yè)務(wù)邏輯,包括增刪改查等操作
4.http服務(wù)器一旦接受客戶端請(qǐng)求就會(huì)解析數(shù)據(jù)并調(diào)用app應(yīng)用,app解析完數(shù)據(jù)后返回給http服務(wù),并響應(yīng)給客戶端
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的武陵源網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
二、客戶端和web服務(wù)通信,web服務(wù)和app應(yīng)用怎么通信
1.客戶端和web服務(wù)通信
客戶端和web服務(wù)通信使用http協(xié)議
C/S 模型,
request請(qǐng)求包括:
第一部分:請(qǐng)求行
第二部分:請(qǐng)求頭
第三部分:空行
第四部分: 請(qǐng)求體
response包括:
第一部分:狀態(tài)行,由HTTP/1.1(協(xié)議版本) 200(狀態(tài)碼) OK(狀態(tài)碼的描述) 構(gòu)成
第二部分:響應(yīng)頭,由一些鍵值對(duì)構(gòu)成,用來(lái)說(shuō)明客戶端要使用的一些附加信息
第三部分:空行,響應(yīng)頭后面的空行時(shí)必須的
第四部分:響應(yīng)正文,服務(wù)器返回給客戶端的文本信息
2.web服務(wù)和app使用怎么通信
在web服務(wù)和app應(yīng)用之間需要定義一個(gè)接口規(guī)則,或者叫協(xié)議,規(guī)定兩者之間數(shù)據(jù)通信方式,即web服務(wù)以怎樣的方式調(diào)用app應(yīng)用.
python規(guī)定,web服務(wù)的接口規(guī)則是wsgi協(xié)議,wsgi協(xié)議對(duì)于server和app接口定義如下:
server調(diào)用方式:
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',]
只要遵從上述調(diào)用方式,均實(shí)現(xiàn)了wsgi協(xié)議.
python內(nèi)置了wsgiref模塊,用于提供server服務(wù),django使用此模塊開(kāi)發(fā)測(cè)試,但是生產(chǎn)環(huán)境使用其他模塊來(lái)處理
一次web服務(wù)到app響應(yīng)的流程圖如下:
django 框架原理
三、定義一個(gè)簡(jiǎn)單的wsgi服務(wù)器框架
django框架的server部分由python內(nèi)置的wsgiref模塊提供,我們只需要編寫(xiě)application應(yīng)用程序部分
from wsgiref.simple_server import make_server
def app(environ, start_response): # wsgi協(xié)議規(guī)定的application部分的編碼形式,可在此基礎(chǔ)上擴(kuò)展
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框架請(qǐng)求響應(yīng)流程:
django 框架原理
四、django的server實(shí)現(xiàn)
django使用的server是基于python內(nèi)置的wsgiref模塊的simple_server,每次django啟動(dòng)都會(huì)執(zhí)行run函數(shù),run函數(shù)會(huì)調(diào)用server_forver方法,此步驟會(huì)執(zhí)行socket_server的循環(huán)執(zhí)行,這樣就能不斷監(jiān)聽(tīng)客戶端的請(qǐng)求,server端調(diào)用application響應(yīng)用戶請(qǐng)求
五、django的application實(shí)現(xiàn)
django的application是通過(guò)WSGIhandle的一個(gè)實(shí)例來(lái)實(shí)現(xiàn),此實(shí)例可以被回掉,然后根據(jù)wsgi的接口規(guī)則傳入environ和start_response。所以本質(zhì)上,django就是使用的內(nèi)置python提供的wsgiref.simple_server再對(duì)application進(jìn)行豐富的封裝。大部分的django編碼工作都在application部分
六、django調(diào)用鏈
django 框架原理