摘要:前文編程解析請(qǐng)求頭的框架和解析請(qǐng)求的類我們都寫好了,現(xiàn)在唯一要做的就是處理相應(yīng)?;貜?fù)響應(yīng)的原理就是這樣,后續(xù)每增加一個(gè)路徑,就在字典中增加一條及增加一個(gè)對(duì)應(yīng)的響應(yīng)函數(shù)。下一篇文章編程實(shí)現(xiàn)函數(shù)
前文:【python socket編程】—— 2.解析http請(qǐng)求頭
web的框架和解析請(qǐng)求的Request類我們都寫好了,現(xiàn)在唯一要做的就是處理相應(yīng)。編寫一個(gè)route_dict字典,key是url路徑,value是對(duì)應(yīng)這個(gè)url的相應(yīng)函數(shù),并使用response_for_request作為唯一的接口接受請(qǐng)求,并從route_dict獲取對(duì)應(yīng)的函數(shù),如下:
route_dict = { "/": route_index, } def response_for_request(request): path = request.parse_path()[0] return route_dict.get(path, error_handle)(request)
當(dāng)請(qǐng)求"/"時(shí),response_for_request根據(jù)request解析到"/"這個(gè)path,然后從route_dict得到route_index這個(gè)函數(shù),最后返回route_index(request)的結(jié)果。route_index需要按照http響應(yīng)的格式返回字節(jié)數(shù)據(jù),例如:
HTTP/1.1 200 OK Content-Type: text/htmlINDEX Index Page
與請(qǐng)求的格式類似,第一行HTTP/1.1 200 OK分別表示協(xié)議、狀態(tài)碼和狀態(tài),Content-Type: text/html是header中的key: value形式的內(nèi)容,這里只有一行,常見的還有Set-Cookie、Content-Length等;然后是空行;最后就是html頁面的內(nèi)容。假設(shè)以上內(nèi)容都以str的形式放在response變量中,那么route_index可以寫成:
def route_index(request): print("Request: ", request.content) response = "..." # 上文的內(nèi)容,省略 print("Response: ", response) return response.encode(encoding="utf-8")
此時(shí)運(yùn)行runserver,在瀏覽器輸入url,就可以看到內(nèi)容Index Page。
回復(fù)響應(yīng)的原理就是這樣,后續(xù)每增加一個(gè)路徑,就在字典中增加一條item及增加一個(gè)對(duì)應(yīng)的響應(yīng)函數(shù)。當(dāng)用戶請(qǐng)求的路徑不在route_dict中時(shí),就返回error_handle這個(gè)函數(shù),我們只要讓它返回類似404 NOT FOUND之類的內(nèi)容就可以了。
下一篇文章:【python socket編程】—— 4.實(shí)現(xiàn)redirect函數(shù)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/41321.html
摘要:原理就是當(dāng)瀏覽器接受到服務(wù)器響應(yīng)的狀態(tài)碼是或者時(shí),表示請(qǐng)求的頁面已經(jīng)永久或臨時(shí)性轉(zhuǎn)移到了新的位置,而這個(gè)新的位置儲(chǔ)存在響應(yīng)的里這個(gè)字段。 前文:【python socket編程】—— 3.響應(yīng) 在Flask框架中有一個(gè)redirect函數(shù),用于實(shí)現(xiàn)頁面的跳轉(zhuǎn),現(xiàn)在我們來實(shí)現(xiàn)它。原理就是:當(dāng)瀏覽器接受到服務(wù)器響應(yīng)的狀態(tài)碼是301或者302時(shí),表示請(qǐng)求的頁面已經(jīng)永久或臨時(shí)性轉(zhuǎn)移到了新的位...
摘要:前文編程實(shí)現(xiàn)函數(shù)的實(shí)現(xiàn)很簡(jiǎn)單,在服務(wù)器返回的響應(yīng)中,里增加,瀏覽器接受到中的,下次訪問這個(gè)網(wǎng)站的請(qǐng)求中就會(huì)帶上這個(gè)。此時(shí)服務(wù)端解析,根據(jù)就知道當(dāng)前用戶是登陸狀態(tài)的。顯然,直接在里寫用戶的是不安全的。下一篇文章編程簡(jiǎn)單實(shí)現(xiàn)和密碼 前文:【python socket編程】—— 4.實(shí)現(xiàn)redirect函數(shù) cookie的實(shí)現(xiàn)很簡(jiǎn)單,在服務(wù)器返回的響應(yīng)中,header里增加Set-Cook...
摘要:請(qǐng)求頭的換行使用的是。編寫一個(gè)類,來解析請(qǐng)求的方法路徑和,如下下一篇文章編程響應(yīng) 前文:【python socket編程】—— 1.初探 在上一篇文章中我們知道,socket.accept()接受的數(shù)據(jù)是請(qǐng)求頭,請(qǐng)求頭格式是這樣的: POST /login HTTP/1.1 Host: 127.0.0.1:1207 User-Agent: Mozilla/5.0 (X11; Ubunt...
摘要:從導(dǎo)入相應(yīng)函數(shù),即傳入一個(gè)上一步中的類,返回對(duì)應(yīng)的網(wǎng)頁內(nèi)容,具體實(shí)現(xiàn)將在后續(xù)講解。后續(xù)只要去處理解析請(qǐng)求和響應(yīng)部分即可,主程序可以不用再修改。下一篇文章編程解析請(qǐng)求頭 Flask或者其他框架都是封裝的比較完善,我們可以不去關(guān)注路由、SESSION等到底是怎么實(shí)現(xiàn)的,現(xiàn)在我們使用socket來實(shí)現(xiàn)一個(gè)帶有注冊(cè)、登錄功能的To do網(wǎng)站,這樣能對(duì)后端框架了解的稍微更深入一點(diǎn)(當(dāng)然你也可以直...
摘要:當(dāng)一個(gè)客戶端連接時(shí),它將返回一個(gè)新的對(duì)象,對(duì)象中有表示當(dāng)前連接的和一個(gè)由主機(jī)端口號(hào)組成的連接的元組,更多關(guān)于元組值的內(nèi)容可以查看地址族一節(jié)中的詳情這里必須要明白我們通過調(diào)用方法擁有了一個(gè)新的對(duì)象。 博客原文: https://keelii.com/2018/09/24/socket-programming-in-python/ 說明 本書翻譯自 realpython 網(wǎng)站上的文章教程 ...
閱讀 2582·2021-11-18 10:02
閱讀 1715·2021-09-30 10:00
閱讀 5333·2021-09-22 15:27
閱讀 1215·2019-08-30 15:54
閱讀 3677·2019-08-29 11:13
閱讀 2953·2019-08-29 11:05
閱讀 3329·2019-08-29 11:01
閱讀 576·2019-08-26 13:52