用Python寫一個Web應用向族,周邊知識梳理

首先這是網(wǎng)絡編程的范疇呵燕,因此來了解一下這部分的知識。

首先件相,要在網(wǎng)絡上進行通信再扭,就需要有相關網(wǎng)絡協(xié)議。

TCP/IP夜矗,UDP……等等泛范。

當然你可以說我直接選用一個框架作為開始,不想了解這么多東西紊撕。那樣也沒問題罢荡,不過到一定的時間,相信你還是會愿意回過頭來看一看這些基礎知識的对扶。

提到網(wǎng)絡編程区赵,你一定見過Socket,翻譯過來是套接字辩稽。這個是啥惧笛,相信你也和我一樣在初見到它的時候一頭霧水,我覺得是翻譯的不好逞泄,引用一段我覺得還算不錯的解釋:

Socket是網(wǎng)絡編程的一個抽象概念患整。通常我們用一個Socket表示“打開了一個網(wǎng)絡鏈接”,而打開一個Socket需要知道目標計算機的IP地址和端口號喷众,再指定協(xié)議類型即可各谚。

那么,拋開各種框架不談到千,直接用Python去進行網(wǎng)絡編程時昌渤,一般會用到socket模塊。具體示例代碼憔四,我隨便找了本書上的偽代碼抄在下面剃允。

創(chuàng)建TCP服務器
ss = socket() # 創(chuàng)建服務器套接字
ss.bind() # 套接字與地址綁定
ss.listen() # 監(jiān)聽連接
inf_loop:# 服務器無限循環(huán)
    cs = ss.accept() # 接受客戶端連接
    comm_loop:# 通信循環(huán)
          cs.recv()/cs.send() # 對話(接收/發(fā)送)
          cs.close()# 關閉客戶端套接字
ss.close()# 關閉服務器套接字#(可選)
創(chuàng)建TCP客戶端
cs = socket() # 創(chuàng)建客戶端套接字
cs.connect() # 嘗試連接服務器
comm_loop:# 通信循環(huán)
    cs.send()/cs.recv() # 對話(發(fā)送/接收)
cs.close()# 關閉客戶端套接字

流程是這樣:先創(chuàng)建一個服務器端辅斟,再創(chuàng)建一個客戶端,
然后它們開始參與發(fā)送和接收的對話,直到連接終止毛俏。

具體操作的時候宦赠,我們需要打開兩個命令行窗口胸嘴,一個運行服務器程序券犁,另一個運行客戶端程序,就可以看到對話的效果了。

到這里你應該有了一個大致的概念:在網(wǎng)絡上通信裁替,需要通信的雙方项玛,以及網(wǎng)絡協(xié)議,然后建立起聯(lián)系弱判。

Web開發(fā)

Web當然是網(wǎng)絡的一部分襟沮。

在Web應用中,服務器把網(wǎng)頁傳給瀏覽器裕循,實際上就是把網(wǎng)頁的HTML代碼發(fā)送給瀏覽器臣嚣,讓瀏覽器顯示出來。而瀏覽器和服務器之間的傳輸協(xié)議是HTTP剥哑,所以:

  • HTML是一種用來定義網(wǎng)頁的文本硅则,會HTML,就可以編寫網(wǎng)頁株婴;
  • HTTP是在網(wǎng)絡上傳輸HTML的協(xié)議怎虫,用于瀏覽器和服務器的通信。

看來困介,HTTP協(xié)議是Web開發(fā)中大审,十分重要的協(xié)議了。

關于HTTP協(xié)議的具體知識座哩,推薦一本書《圖解HTTP協(xié)議》徒扶。

因此,在Web應用中根穷,經(jīng)常在做接受HTTP請求姜骡、解析HTTP請求、發(fā)送HTTP響應這些苦力活屿良。所以圈澈,如果需要自己動手實現(xiàn),就得接觸到TCP連接尘惧、HTTP原始請求和響應格式康栈,估計還得閱讀不少相關規(guī)范。

WSGI

可是大部分Web應用的開發(fā)者并不想把時間耗費在這些苦力活上喷橙,因此啥么,WSGI應運而生了。其全稱是Web Server Gateway Interface贰逾。

WSGI接口定義非常簡單饥臂,它只要求Web開發(fā)者實現(xiàn)一個函數(shù),就可以響應HTTP請求似踱。

Python也內(nèi)置了一個WSGI服務器,這個模塊叫wsgiref,它是用純Python編寫的WSGI服務器的參考實現(xiàn)核芽。所謂“參考實現(xiàn)”是指該實現(xiàn)完全符合WSGI標準囚戚,但是不考慮任何運行效率,僅供開發(fā)和測試使用轧简。

了解了WSGI框架驰坊,我們發(fā)現(xiàn):其實一個Web App,就是寫一個WSGI的處理函數(shù)哮独,針對每個HTTP請求進行響應拳芙。

但是當HTTP請求、URL多起來的時候皮璧,問題又出現(xiàn)了:如何處理URL和處理函數(shù)之間的映射關系舟扎?

WSGI提供的接口雖然比HTTP接口高級了不少,但和Web App的處理邏輯比悴务,還是比較低級睹限,我們需要在WSGI接口之上能進一步抽象,讓我們專注于用一個函數(shù)處理一個URL讯檐,至于URL到函數(shù)的映射羡疗,就交給Web框架來做。

因此别洪,Python內(nèi)置的WSGI服務器當然不足以滿足許多人的需要叨恨,好在我們還有其他的框架可以選用。

Web框架

目前運行在WSGI協(xié)議之上的Web框架非常多挖垛。從個人經(jīng)驗角度而言:輕量級選Flask痒钝、重量級選Django,當然還有其他的晕换,不過我沒有去深入了解午乓,各位可以自行搜索。

學習它們的教程也很多闸准,比如Flask就有“狼書”《Flask Web開發(fā)實戰(zhàn):入門益愈、進階與原理解析》、“狗書”《Flask Web開發(fā):基于Python的Web應用開發(fā)實戰(zhàn)》等不錯的參考書籍夷家。

當然蒸其,這些框架也都對WSGI進行了各自的實現(xiàn)。

因為每個Web框架都不是專注于實現(xiàn)服務器方面的库快,所以這些WSGI服務器一般也就是開發(fā)調(diào)試時使用摸袁。在生產(chǎn)環(huán)境部署的時候,不會簡單的使用Web框架自帶的服務器义屏。

實際環(huán)境使用的WSGI服務器

  1. Gunicorn

最流行的大概就是這個了吧靠汁。

  1. uwsgi

因為使用C語言開發(fā)蜂大,會和底層接觸的更好。

一般生產(chǎn)環(huán)境上蝶怔,也就是二者選其一了奶浦。我目前在用的是Gunicorn。

小結

閱讀完這篇文章踢星,你應該能夠從網(wǎng)絡編程的基本原理澳叉,到框架選用,再到生產(chǎn)環(huán)境的部署沐悦,都有了相關概念了成洗。

除了沒有告訴你怎么具體寫一個請求處理函數(shù)以外,其他周邊知識你都清楚了哦藏否?如果還有問題瓶殃,歡迎留言。

參考文獻:

http://python.jobbole.com/88653/
http://python.jobbole.com/88447/?utm_source=blog.jobbole.com&utm_medium=relatedPosts
https://www.liaoxuefeng.com
《Python核心編程(第3版)》

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秕岛,一起剝皮案震驚了整個濱河市碌燕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌继薛,老刑警劉巖修壕,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異遏考,居然都是意外死亡慈鸠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門灌具,熙熙樓的掌柜王于貴愁眉苦臉地迎上來青团,“玉大人,你說我怎么就攤上這事咖楣《桨剩” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵诱贿,是天一觀的道長娃肿。 經(jīng)常有香客問我,道長珠十,這世上最難降的妖魔是什么料扰? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮焙蹭,結果婚禮上晒杈,老公的妹妹穿的比我還像新娘。我一直安慰自己孔厉,他們只是感情好拯钻,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布帖努。 她就那樣靜靜地躺著,像睡著了一般说庭。 火紅的嫁衣襯著肌膚如雪然磷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天刊驴,我揣著相機與錄音,去河邊找鬼寡润。 笑死捆憎,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的梭纹。 我是一名探鬼主播躲惰,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼变抽!你這毒婦竟也來了础拨?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤绍载,失蹤者是張志新(化名)和其女友劉穎诡宗,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體击儡,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡塔沃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了阳谍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛀柴。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖矫夯,靈堂內(nèi)的尸體忽然破棺而出鸽疾,到底是詐尸還是另有隱情,我是刑警寧澤训貌,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布制肮,位于F島的核電站,受9級特大地震影響旺订,放射性物質(zhì)發(fā)生泄漏弄企。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一区拳、第九天 我趴在偏房一處隱蔽的房頂上張望拘领。 院中可真熱鬧,春花似錦樱调、人聲如沸约素。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽圣猎。三九已至士葫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間送悔,已是汗流浹背慢显。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留欠啤,地道東北人荚藻。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像洁段,于是被迫代替她去往敵國和親应狱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348