国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

從零開始搭建論壇(一):Web服務(wù)器與Web框架

開發(fā) 前端
學(xué)習(xí)一個(gè)框架最好的方式就是用框架做一個(gè)項(xiàng)目,在實(shí)戰(zhàn)中理解掌握框架。這里我用 Flask 框架,使用 Mysql 數(shù)據(jù)庫(kù)做了一個(gè)論壇系統(tǒng)。

 【引自selfboot的博客】之前用 Django 做過一個(gè)小的站點(diǎn),感覺Django太過笨重,于是就準(zhǔn)備換一個(gè)比較輕量級(jí)的 Web 框架來玩玩。Web.py 作者已經(jīng)掛掉,項(xiàng)目好久沒有更新,所以不準(zhǔn)備用它。而 Flask 也是一個(gè)成熟的輕量級(jí) Web 框架,在 github 上有眾多的 Star 和 Fork,文檔和擴(kuò)展也很豐富,值得學(xué)習(xí)。

學(xué)習(xí)一個(gè)框架最好的方式就是用框架做一個(gè)項(xiàng)目,在實(shí)戰(zhàn)中理解掌握框架。這里我用 Flask 框架,使用 Mysql 數(shù)據(jù)庫(kù)做了一個(gè)論壇系統(tǒng)。麻雀雖小,五臟俱全,論壇效果圖如下:

 

論壇系統(tǒng)截圖

下面是論壇的基本功能:

  • 完整的用戶模塊(注冊(cè)、登錄,更改、找回密碼、信息修改、站內(nèi)消息通知);
  • 豐富的論壇模塊(創(chuàng)建、回復(fù)話題,站內(nèi)搜索,markdown支持,@user 提醒);
  • 強(qiáng)大的后臺(tái)管理,支持屏蔽用戶、話題、評(píng)論,支持各種條件搜索話題、評(píng)論;

本博客將會(huì)用一系列文章,記錄論壇系統(tǒng)搭建的過程,希望對(duì)剛?cè)腴TWeb開發(fā)的同學(xué)有所幫助。

我們經(jīng)常聽說 Django, Flask 這些 python 語(yǔ)言的Web 框架,那么框架到底是什么,Web框架和Web服務(wù)器(Nginx, Apache等)有什么區(qū)別?離開框架還能用 Python 搭建Web站點(diǎn)嗎?要解決這些疑問,我們有必要來理解下 Web 服務(wù)器的工作原理,以及 Web 框架的本質(zhì)。

Web 服務(wù)器

當(dāng)我們?cè)跒g覽器輸入U(xiǎn)RL后,瀏覽器會(huì)先請(qǐng)求DNS服務(wù)器,獲得請(qǐng)求站點(diǎn)的 IP 地址。然后發(fā)送一個(gè)HTTP Request(請(qǐng)求)給擁有該 IP 的主機(jī),接著就會(huì)接收到服務(wù)器給我們的 HTTP Response(響應(yīng)),瀏覽器經(jīng)過渲染后,以一種較好的效果呈現(xiàn)給我們。這個(gè)過程中,正是Web服務(wù)器在幕后默默做貢獻(xiàn)。

簡(jiǎn)單來說,Web服務(wù)器是在運(yùn)行在物理服務(wù)器上的一個(gè)程序,它永久地等待客戶端(主要是瀏覽器,比如Chrome,F(xiàn)irefox等)發(fā)送請(qǐng)求。當(dāng)收到請(qǐng)求之后,它會(huì)生成相應(yīng)的響應(yīng)并將其返回至客戶端。Web服務(wù)器通過HTTP協(xié)議與客戶端通信,因此也被稱為HTTP服務(wù)器。

 Web 服務(wù)器

Web服務(wù)器的工作原理并不復(fù)雜,一般可分成如下4個(gè)步驟:建立連接、請(qǐng)求過程、應(yīng)答過程以及關(guān)閉連接。

  1. 建立連接:客戶機(jī)通過TCP/IP協(xié)議建立到服務(wù)器的TCP連接。
  2. 請(qǐng)求過程:客戶端向服務(wù)器發(fā)送HTTP協(xié)議請(qǐng)求包,請(qǐng)求服務(wù)器里的資源文檔。
  3. 應(yīng)答過程:服務(wù)器向客戶機(jī)發(fā)送HTTP協(xié)議應(yīng)答包,如果請(qǐng)求的資源包含有動(dòng)態(tài)語(yǔ)言的內(nèi)容,那么服務(wù)器會(huì)調(diào)用動(dòng)態(tài)語(yǔ)言的解釋引擎負(fù)責(zé)處理“動(dòng)態(tài)內(nèi)容”,并將處理得到的數(shù)據(jù)返回給客戶端。由客戶端解釋HTML文檔,在客戶端屏幕上渲染圖形結(jié)果。
  4. 關(guān)閉連接:客戶機(jī)與服務(wù)器斷開。

下面我們實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 Web 服務(wù)器。運(yùn)行示例程序后,會(huì)監(jiān)聽本地端口 8000,在瀏覽器訪問 http://localhost:8000 就能看到響應(yīng)內(nèi)容。而我們的程序也能夠打印出客戶端發(fā)來的請(qǐng)求內(nèi)容,如下圖:

 簡(jiǎn)單Web服務(wù)器

這里Request 和 Response 都需要遵守 HTTP 協(xié)議,關(guān)于 HTTP 協(xié)議的詳細(xì)內(nèi)容,可以讀讀《HTTP 權(quán)威指南》,或者看我整理的HTTP 部分內(nèi)容。

雖然說web服務(wù)器的主要工作是根據(jù)request返回response,但是實(shí)際中的 Web 服務(wù)器遠(yuǎn)遠(yuǎn)比上面示例的復(fù)雜的多,因?yàn)橐紤]的因素實(shí)在是太多了,比如:

  • 緩存機(jī)制:講一些經(jīng)常被訪問的頁(yè)面緩存起來,提高響應(yīng)速度;
  • 安全:防止黑客的各種攻擊,比如 SYN Flood 攻擊;
  • 并發(fā)處理:如何響應(yīng)不同客戶端同時(shí)發(fā)起的請(qǐng)求;
  • 日志:記錄訪問日至,方便做一些分析。

目前在UNIX和LINUX平臺(tái)下使用最廣泛的免費(fèi) Web 服務(wù)器有Apache和 Nginx 。

Web 應(yīng)用程序

Web 服務(wù)器接受 Http Request,返回 Response,很多時(shí)候 Response 并不是靜態(tài)文件,因此需要有一個(gè)應(yīng)用程序根據(jù) Request 生成相應(yīng)的 Response。這里的應(yīng)用程序主要用來處理相關(guān)業(yè)務(wù)邏輯,讀取或者更新數(shù)據(jù)庫(kù),根據(jù)不同 Request 返回相應(yīng)的 Response。注意這里并不是 Web 服務(wù)器本身來做這件事,它只負(fù)責(zé) Http 協(xié)議層面和一些諸如并發(fā)處理,安全,日志等相關(guān)的事情。

應(yīng)用程序可以用各種語(yǔ)言編寫(Java, PHP, Python, Ruby等),這個(gè)應(yīng)用程序會(huì)從Web服務(wù)器接收客戶端的請(qǐng)求,處理完成后,再返回響應(yīng)給Web服務(wù)器,最后由Web服務(wù)器返回給客戶端。整個(gè)架構(gòu)如下:

 Web應(yīng)用程序

以 Python 為例,使用Python開發(fā)Web,最原始和直接的辦法是使用CGI標(biāo)準(zhǔn),在1998年這種方式很流行。首先確保 Web 服務(wù)器支持CGI及已經(jīng)配置了CGI的處理程序,然后設(shè)置好CGI目錄,在目錄里面添加相應(yīng)的 python 文件,每一個(gè) python 文件處理相應(yīng)輸入,生成一個(gè) html 文件即可,如下例:

  1. # !/usr/bin/python 
  2. # -*- coding: UTF-8 -*- 
  3. print "Content-type:text/html" 
  4. print  # 空行,告訴服務(wù)器結(jié)束頭部 
  5. print '<html>' 
  6. print '<head>' 
  7. print '<meta charset="utf-8">' 
  8. print '</head>' 
  9. print '<body>' 
  10. print '<h2>Hello Word! 我是一個(gè)CGI程序</h2>' 
  11. print '</body>' 
  12. print '</html>'  

這樣在瀏覽器訪問該文件就可以得到一個(gè)簡(jiǎn)單的 Hello World 網(wǎng)頁(yè)內(nèi)容。直接通過 CGI 寫 Web 應(yīng)用程序看起來很簡(jiǎn)單,每一個(gè)文件處理輸入,生成html。但是實(shí)際開發(fā)中,可能會(huì)遇到許多不方便的地方。比如:

  • 每個(gè)獨(dú)立的CGI腳本可能會(huì)重復(fù)寫數(shù)據(jù)庫(kù)連接,關(guān)閉的代碼;
  • 后端開發(fā)者會(huì)看到一堆 Content-Type 等和自己無關(guān)的 html 頁(yè)面元素;

Web 框架

早期開發(fā)站點(diǎn)確做了許多重復(fù)性勞動(dòng),后來為了減少重復(fù),避免寫出龐雜,混亂的代碼,人們將 Web 開發(fā)的關(guān)鍵性過程提取出來,開發(fā)出了各種 Web 框架。有了框架,就可以專注于編寫清晰、易維護(hù)的代碼,無需關(guān)心數(shù)據(jù)庫(kù)連接之類的重復(fù)性工作。

其中一種比較經(jīng)典的Web框架采用了 MVC 架構(gòu),如下圖所示:

 MVC 架構(gòu)

用戶輸入 URL,客戶端發(fā)送請(qǐng)求,控制器(Controller)首先會(huì)拿到請(qǐng)求,然后用模型(Models)從數(shù)據(jù)庫(kù)取出所有需要的數(shù)據(jù),進(jìn)行必要的處理,將處理后的結(jié)果發(fā)送給 視圖(View),視圖利用獲取到的數(shù)據(jù),進(jìn)行渲染生成 Html Response返回給客戶端。

以 python web 框架 flask 為例,框架本身并不限定我們用哪種架構(gòu)來組織我們的應(yīng)用,不過 flask 可以很好地支持以 MVC 方式組織應(yīng)用。

控制器:flask 可以用裝飾器來添加路由項(xiàng),如下:

  1. @app.route('/'
  2. def main_page(): 
  3.     pass  

模型:主要用來取出需要的數(shù)據(jù),如下面函數(shù)中操作:

  1. @app.route('/'
  2. def main_page(): 
  3.     """Searches the database for entries, then displays them.""" 
  4.     db = get_db() 
  5.     cur = db.execute('select * from entries order by id desc'
  6.     entries = cur.fetchall() 
  7.     return render_template('index.html', entries=entries)  

視圖:flask 利用 jinja2 來渲染頁(yè)面,下面的模版文件指定了頁(yè)面的樣式:

  1. {% for entry in entries %} 
  2. <li> 
  3.   <h2>{{ entry.title }}</h2> 
  4.   <div>{{ entry.text|safe }}</div> 
  5. </li> 
  6. {% else %} 
  7. <li><em>No entries yet. Add some!</em></li> 
  8. {% endfor %}  

Web 服務(wù)器網(wǎng)關(guān)接口

我們知道Python有著許多的 Web 框架,而同時(shí)又有著許多的 Web 服務(wù)器(Apache, Nginx, Gunicorn等),框架和Web服務(wù)器之間需要進(jìn)行通信,如果在設(shè)計(jì)時(shí)它們之間不可以相互匹配的,那么選擇了一個(gè)框架就會(huì)限制對(duì) Web 服務(wù)器的選擇,這顯然是不合理的。

那么,怎樣確保可以在不修改Web服務(wù)器代碼或網(wǎng)絡(luò)框架代碼的前提下,使用自己選擇的服務(wù)器,并且匹配多個(gè)不同的網(wǎng)絡(luò)框架呢?答案是接口,設(shè)計(jì)一套雙方都遵守的接口就可以了。對(duì)python來說,就是WSGI(Web Server Gateway Interface,Web服務(wù)器網(wǎng)關(guān)接口)。其他編程語(yǔ)言也擁有類似的接口:例如Java的Servlet API和Ruby的Rack。

Python WSGI的出現(xiàn),讓開發(fā)者可以將 Web 框架與 Web 服務(wù)器的選擇分隔開來,不再相互限制。現(xiàn)在,你可以真正地將不同的 Web 服務(wù)器與Web框架進(jìn)行混合搭配,選擇滿足自己需求的組合。例如,可以使用 Gunicorn 或Nginx/uWSGI來運(yùn)行Django、Flask或web.py應(yīng)用。

[[175126]]

 WSGI 適配

下一篇我們將會(huì)仔細(xì)分析 WSGI 接口標(biāo)準(zhǔn),然后一起來寫一個(gè)簡(jiǎn)單的 WSGI Web 服務(wù)器。

責(zé)任編輯:龐桂玉 來源: selfboot博客
相關(guān)推薦

2016-11-02 14:09:13

搭建論壇Web服務(wù)器網(wǎng)關(guān)接口

2016-11-02 14:18:45

搭建論壇Flask框架

2016-08-10 16:28:00

WebURLHTTP

2016-10-19 08:36:51

2010-02-22 09:39:52

HTML 5Web

2016-08-22 20:37:10

PythonWeb服務(wù)器

2016-10-11 12:45:50

PythonWeb服務(wù)器

2023-11-23 15:06:36

PythonHTTP服務(wù)器

2024-05-15 14:29:45

2019-05-14 09:39:07

Web服務(wù)器Web容器應(yīng)用程序服務(wù)器

2023-11-17 09:13:36

2019-11-05 10:47:16

Python框架服務(wù)器

2013-07-10 10:38:48

JavaScript框

2015-10-15 14:16:24

2017-09-13 14:01:51

數(shù)據(jù)庫(kù)MongoDB數(shù)據(jù)庫(kù)即服務(wù)

2017-10-19 16:12:57

2009-01-10 19:25:44

2022-02-22 11:57:32

BOAWeb服務(wù)器

2023-12-27 08:47:41

PrometheusLinux架構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产精品一区二区久久| 日韩激情av在线| 岛国av在线一区| 不卡日韩av| 亚洲成人人体| 亚洲一区二区av电影| 日韩高清三级| 精品久久影视| 久久久国产影院| 欧美性受ⅹ╳╳╳黑人a性爽| 亚洲青青青在线视频| 六十路精品视频| 中文字幕区一区二区三| 日韩免费视频一区| 中文字幕在线直播| 亚洲欧美日韩一区二区在线| 免费一区二区三区在线观看| 极品在线视频| 欧美影视一区| 国产毛片一区二区| 午夜激情久久久| 97在线视频一区| 国产成人ay| 国产精品丝袜视频| 青青草原综合久久大伊人精品优势 | 国产一区二区美女诱惑| 成人在线观看a| 亚洲成人你懂的| 快色在线观看| 亚洲综合成人在线视频| 性chinese极品按摩| 久久久久久久精| 超碰在线人人爱| 久久看人人爽人人| 区一区二日本| 亚洲精品乱码久久久久久久久| 亚洲综合第一| 色呦哟—国产精品| 粉嫩精品一区二区三区在线观看| 国产精品福利av| 国产欧美一区二区三区在线 | 男人日女人下面视频| 国产精品美女久久久久aⅴ| 欧美人体一区二区三区| 亚洲www视频| 国产精品视频yy9299一区| 高清电影在线免费观看| 国产日韩亚洲欧美| 91女厕偷拍女厕偷拍高清| 成人在线观看视频app| 色欧美片视频在线观看 | 日本福利视频网站| 国产精品中文有码| 国产导航在线| 性欧美疯狂xxxxbbbb| 黑人与亚洲人色ⅹvideos| 自拍偷拍亚洲综合| www.综合网.com| 97视频在线免费播放| 成人情趣视频网站| 国产亚洲xxx| 久久丁香综合五月国产三级网站| 美女视频黄a视频全免费观看| 欧美精品电影在线| 久久久www成人免费无遮挡大片| 久久久人成影片一区二区三区在哪下载| 91免费看片网站| 亚洲六月丁香色婷婷综合久久| 免费福利视频一区| 欧美性色黄大片人与善| 欧美激情资源网| 丁香花在线高清完整版视频 | www.日本少妇| 欧美久久久久中文字幕| 欧州一区二区三区| 美脚丝袜一区二区三区在线观看| 国产精品一二三四| 一区 二区 三区| 亚洲国产精久久久久久| 亚洲mv大片欧洲mv大片| av在线免费观看网站| 天天亚洲美女在线视频| 欧洲成人综合网| 日韩人妻无码精品久久久不卡| 日韩三级中文字幕| 韩国精品免费视频| 99精品国产一区二区三区2021 | 国产一级黄色片免费| 成人久久18免费网站图片| 国产成人免费在线视频| 黄色av免费在线看| 国产精品久久久久久久久久久久久| 国产一区二区成人久久免费影院| 麻豆tv在线| 国产精成人品localhost| 日韩欧美大尺度| 亚洲伦理精品| 国产精品精华液网站| 中文字幕久热精品视频在线| 成人动漫视频| 日韩伦理在线观看| 欧美二区三区| 亚洲人妖av一区二区| 亚洲精品一线| 精品国产一区二区三区av性色| 91精品国产乱码久久久竹菊| 57pao精品| 在线国产精品一区| 伊人久久青草| 国产麻豆视频一区二区| 中文字幕第21页| 日韩国产精品一区| 亚洲电影在线播放| 久久夜色精品国产噜噜av| 亚洲不卡av不卡一区二区| 日韩中文字幕| 日韩免费影院| 2019中文字幕在线视频| 日本精品久久久久中文字幕| 国产精品久久久久久av福利| 日韩在线观看av| 午夜欧美2019年伦理| 午夜综合激情| 日韩免费电影| 簧片在线观看| 熟女视频一区二区三区| 欧美亚洲第一区| 欧美一区二区免费视频| 久久久久久久久免费| 99精品电影| a成人v在线| 色偷偷亚洲第一成人综合网址| 欧美一区二区三区精品电影| 日韩女优视频免费观看| 中文字幕成人网| 超碰国产一区| 91黄色小网站| 久久人人爽人人爽人人av| 成人免费自拍视频| 国产成人综合亚洲| 91九色单男在线观看| 国产富婆一区二区三区| 国产精品三区四区| 成人动漫视频在线观看完整版| 999精品在线观看| 免费h精品视频在线播放| 日本在线播放不卡| 国产suv精品一区二区| 日韩精品日韩在线观看| 亚洲最大成人综合| 欧美国产精品v| 精一区二区三区| 狠狠色综合色综合网络| 国产亚洲高清视频| 国产精品成人一区二区不卡| 成人精品动漫一区二区三区| 天堂电影一区| 女囚岛在线观看| 午夜激情在线观看| 日韩电影在线视频| 精品亚洲精品| 成人网18入口| 黄污网站在线观看| 国产在线中文字幕| 国产精品迅雷| 91精品国产福利在线观看麻豆| 久久精品国产在热久久| 亚洲午夜日本在线观看| 日韩欧美亚洲国产另类| 久久精视频免费在线久久完整在线看| 91精品国产自产在线| 日本大片免费看| 欧美69xxx| 超碰在线网站| 国产h片在线观看| 香蕉久久一区| 91精品精品| 日韩综合小视频| av不卡免费在线观看| 99久久精品免费看国产免费软件| 91亚洲精品久久久蜜桃网站| 国产91丝袜在线播放九色| 国产精品一级在线| 毛片基地黄久久久久久天堂| 中文字幕人成不卡一区| 亚洲精品动漫100p| 91久久在线视频| 欧美在线观看www| 素人啪啪色综合| 欧美成人自拍| 老司机在线精品视频| 视频在线观看免费影院欧美meiju| 免费日本视频一区| 欧美日韩精品在线| 日韩免费高清在线观看| 毛片视频免费| 成人三级av在线| 粉嫩13p一区二区三区| 国产一区二区欧美日韩| 成人国产在线看|