您當前位置>首頁 » 新聞資(zī)訊 » 網站(zhàn)建設 >
Python中(zhōng)WEB開發(一)
發表時間:2018-6-26
發布人:葵宇科技
浏覽次數:26
CS即客戶端、服務器(qì)編程:
客戶端、服務端之間需要使用Socket,約定協議、版本(往往使用的協議是TCP或者UDP),制定地址和(hé)端口,就可(kě)以通(tōng)信了。
客戶端、服務端傳輸數據,數據可(kě)以有一定的格式,雙方必須線約定好。
BS編程,即Browser、Server開發:
Browser浏覽器(qì),一種特殊的客戶端,支持HTTP(s)協議,能夠通(tōng)過URL向服務端發起請求,等待服務端返回HTML等數據,并在浏覽器(qì)内可(kě)視化展示的程序。
Server,支持HTTP(s)協議,能夠接受衆多客戶端發起的HTTP協議請求,經過處理,将HTML等數據返回給浏覽器(qì)。
本質上來說,BS是一種特殊的CS,即客戶端必須是一種支持HTTP協議且能解析并渲染HTML的軟件,服務端必須是能夠接收客戶端HTTP訪問(wèn)的服務軟件。
HTTP協議底層基于TCP協議實現。
BS開發分為兩端開發:
(1) 客戶端開發,或稱前端開發。HTML,CSS,JavaScript等。
(2)服務端開發,Python有WSGI、Flask、Tornado等。
HTTP協議
協議
HTTP協議是無狀态協議。
同一個(gè)客戶端的兩次請求之間沒有任何關(guān)系,從服務器(qì)端角度來說,它不知道這兩個(gè)請求來自同一個(gè)客戶端。
cookie
鍵值對信息。
浏覽器(qì)發起每一請求時,都會把cookie信息發給服務器(qì)端。
是一種客戶端、服務端傳遞數據的技術(shù)。
服務端可(kě)以通(tōng)過判斷這些信息,來确定這次請求是否和(hé)之前的請求有關(guān)聯。
一般來說cookie信息實在服務器(qì)端生成,返回給客戶端的。
客戶端可(kě)以自己設置cookie信息。
URL組成
URL可(kě)以說就是地址,uniform resource locator 統一資(zī)源定位符,每一個(gè)鍊接指向一個(gè)資(zī)源供客戶端訪問(wèn)。
schema://host[:port#]/path/.../[;url-params][?query-string][#anchor]
例如(rú),通(tōng)過下(xià)面URL訪問(wèn)網頁:
http://www.magedu.com/pathon/index.html?id=5&name=python
訪問(wèn)靜态資(zī)源時,通(tōng)過上面的這個(gè)URL訪問(wèn)的是網站(zhàn)的某路(lù)徑下(xià)的Index.html文(wén)件,而這個(gè)文(wén)件對應磁盤上的真實的文(wén)件。就會從磁盤上讀取這個(gè)文(wén)件,并把文(wén)件的内容發揮浏覽器(qì)端。
scheme模式、協議:
http、ftp、https、file、mailto等等。mysql等都是類似這樣寫。
host:port :
www.magedu.com:80,80端口是默認端口可(kě)以不寫。域名會使用DNS解析,域名會解析成IP才能使用。實際上會對解析後返回的IP的TCP的80端口發起訪問(wèn)。
/path/to/resource:
path,指向資(zī)源的路(lù)徑。
?key1=value1&key2=value2:
query string , 查詢字符串,問(wèn)号分割,後面key=value形式,且使用&符号分割。
HTTP消息
消息分為Request、Response。
Request:浏覽器(qì)向服務器(qì)發起的請求。
Response:服務器(qì)對客戶端請求的響應。
請求和(hé)響應消息都是由請求行、Header消息報頭、Body消息正文(wén)組成。
請求
請求消息行:請求方法Method 請求路(lù)徑 協議版本 CRLF
請求方法Method:
GET 請求獲取URL對應的資(zī)源
POST 提交數據至服務器(qì)端
HEAD 和(hé)GET類似,不過不返回消息正文(wén)
常見傳遞信息的方式:
(1) GET方法使用Query String
http://www.magedu.com/pathon/index.html?id=5&name=python
通(tōng)過查詢字符串在URL中(zhōng)傳遞參數
(2) POST方法提交數據
(3) URL中(zhōng)本身就包含着信息
http://www.magedu.com/python/student/001
響應
響應消息行:協議版本 狀态碼 消息描述 CRLF
status code狀态碼:
狀态碼在響應頭第一行:
1xx :提示信息,表示請求已被成功接收,繼續處理
2xx: 表示正常響應
200 正常返回了網頁内容
3xx: 重定向
301 頁面永久性移走,永久重定向。返回新的URL,浏覽器(qì)會根據返回的URL發起新的Request請求。
302 臨時重定向
304 資(zī)源未修改,浏覽器(qì)使用本地緩存
4xx: 客戶端請求錯誤
404 Not Found , 網頁找不到,客戶端請求的資(zī)源有錯
400 請求語法錯誤
401 請求要求身份驗證
5xx: 服務器(qì)端錯誤
500 服務器(qì)内部錯誤
502 上遊服務器(qì)錯誤,如(rú)nginx反向代理的時候
無狀态,有連接和(hé)短(duǎn)連接
無狀态:服務器(qì)無法知道兩次請求之間的聯系,即使是前後兩次同一個(gè)浏覽器(qì)也沒法判斷出是出于一個(gè)浏覽器(qì)的請求。後面通(tōng)過cookie和(hé)session來判斷。
有連接:是因為它基于TCP協議,是面向連接的,需要3次握手、4次斷開。
短(duǎn)連接:自HTTP 1.1之前,都是一個(gè)請求一個(gè)連接,而TCOP的連接創建銷毀成本高,對服務器(qì)有很大的影響。所以,自HTTP 1.1之後,支持keep-alive,默認也是開啟的,一個(gè)連接打開後,會保持一段時間(可(kě)設置),浏覽器(qì)再訪問(wèn)該服務器(qì)就使用這個(gè)TCP連接,減輕了服務器(qì)壓力,提高了效率。
WSGI
WSGI主要規定了服務器(qì)端和(hé)應用程序之間的接口。
WSGI服務器(qì)--wsgiref(實驗用)
wsgiref是一個(gè)WSGI參考實現庫。
wsgiref.simple_server 模塊實現一個(gè)簡單的WSGI HTTP服務器(qì)。
wsgiref.simple_server.make_server(host,port,app,server_class=WSGIServer,handler_class=WSGIRequestHandler) 啟動(dòng)一個(gè)WSGI服務器(qì)。
wsgiref.simple_server.demo_app(environ,start_response) 一個(gè)函數,小巧完整的WSGI的應用程序的實現。
WSGI 服務器(qì)作用
(1) 監聽HTTP服務端口(TCPServer,默認端口80)
(2)接收浏覽器(qì)端的HTTP請求并解析封裝成environ環境數據
(3)負責調用應用程序,将environ和(hé)start_response方法傳入
(4)将應用程序響應的正文(wén)封裝成HTTP響應報文(wén)返回給浏覽器(qì)端
WSGI APP應用程序端
1、應用程序應該是一個(gè)可(kě)調用對象,Python中(zhōng)應該是函數、類、實現了__call__方法的類的實例。
2、這個(gè)可(kě)調用對象應該接收兩個(gè)參數
3、以上可(kě)調用對象的實現,都必須返回一個(gè)可(kě)疊代對象
environ和(hé)start_response這兩個(gè)參數名可(kě)以是任何合法名,但是一般默認都是這2個(gè)名字。
environ
environ是包含HTTP請求信息的dict對象
start_response
它是一個(gè)可(kě)調用對象。有三個(gè)參數,定義如(rú)下(xià):
start_response(status,response_headers,exc_info=None)
status 是狀态碼,如(rú) 200 OK
response_headers 是一個(gè)元素為二元組的列表,例如(rú)[('Content-Type','text/plain;charset=utf-8')]
exc_info 在錯誤處理的時候使用
start_response 應該在返回可(kě)疊代對象之前調用,因為它返回的是Rsponse Header。返回的可(kě)疊代對象是Response Body.
服務器(qì)端
服務器(qì)程序需要調用符合上述定義的可(kě)調用對象APP,傳入environ 、start_response, APP處理後,返回響應頭和(hé)可(kě)疊代對象的正文(wén),由服務器(qì)封裝返回浏覽器(qì)端。
simple_server 隻是參考用,不能用于生産
測試用命令
-I 使用HEAD方法
-X 指定方法,-d 傳輸數據
到這裡,就完成了一個(gè)簡單的WEB程序開發。
WEB服務器(qì)
1、本質上就是一個(gè)TCP服務器(qì),監聽在特定端口上
2、支持HTTP協議,能夠将HTTP請求報文(wén)進行解析,能夠把響應數據進行HTTP協議的報文(wén)封裝并返回浏覽器(qì)端。
3、實現了WSGI協議,該協議約定了和(hé)應用程序之間的接口。
APP應用程序
1、遵從WSGI協議
2、本身是一個(gè)可(kě)調用對象
3、調用start_response,返回響應頭部
4、返回包含正文(wén)的可(kě)疊代對象