0711-web框架01[基礎(chǔ)]
首先 web框架是什么
web框架,我理解為就是一個(gè)程序,HTTP服務(wù)器在遇到動(dòng)態(tài)資源請(qǐng)求的時(shí)候就轉(zhuǎn)接(或調(diào)用)給web框架
web框架處理和生成對(duì)應(yīng)的動(dòng)態(tài)的頁(yè)面,所以web框架可以是各種語(yǔ)言的,這里就用python
然后就是,怎么判斷請(qǐng)求的是動(dòng)態(tài)的呢,就看HTTP/1.1 后面那玩意,這里我就規(guī)定如果是.py結(jié)尾就扔給web框架來(lái)處理
WSGI協(xié)議
WSGI協(xié)議,是用來(lái)規(guī)定web框架和HTTP服務(wù)器間交流的一種協(xié)議
這個(gè)協(xié)議規(guī)定了 服務(wù)器/框架 在 發(fā)送/接收 時(shí) 要傳輸/接收 兩個(gè)參數(shù)
第一個(gè)是要處理的請(qǐng)求(字典格式),第二個(gè)是用以被框架調(diào)用的函數(shù)
具體來(lái)說(shuō)就是web框架會(huì)根據(jù)第一個(gè)參數(shù)生成頁(yè)面返回body,然后調(diào)用第二個(gè)參數(shù)指向的函數(shù)返回header
第二個(gè)函數(shù)我這里就寫了參數(shù)就是第一個(gè)是狀態(tài),(200 OK),第二個(gè)是其他的內(nèi)容
比如Content-Type,text/html;charset=utf-8
以及或許你可以寫個(gè)框架的版本上去,但是這樣不相當(dāng)于把自己翻出來(lái)給別人看嘛
(所以可以寫個(gè)假的,我用flask寫其他的
如果要寫服務(wù)器的內(nèi)容,不能寫這里面,因?yàn)檫@樣就違反了WSGI協(xié)議,寫那個(gè)傳進(jìn)去的函數(shù)里
也就是在服務(wù)器里寫
我這就是self.headers = [("server", "mini_web vQAQ666.666")]
啊,當(dāng)然正規(guī)網(wǎng)站不會(huì)這樣寫:D
反正就是這里多寫將來(lái)就會(huì)多傳輸這些亂七八糟的玩意到header里
之前寫個(gè)空字典,讓服務(wù)器支持WSGI,現(xiàn)在該往里面塞東西了
賽什么呢,反正定義個(gè)鍵值對(duì),鍵的話就叫PATH_INFO,值嘛自然就是flie_name了
然后框架里把flie_name取出來(lái),再判斷(if)具體返回哪個(gè)頁(yè)面就行了