Python中(zhōng)WEB開發(一) - 新聞資(zī)訊 - 雲南小程序開發|雲南軟件開發|雲南網站(zhàn)建設-西山區知普網絡科技工作室

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不管是網站(zhàn),軟件還是小程序,都要直接或間接能為您産生價值,我們在追求其視覺表現的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站(zhàn)成為營銷工具,讓軟件能切實提升企業(yè)内部管理水平和(hé)效率。優秀的程序為後期升級提供便捷的支持!

您當前位置>首頁 » 新聞資(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ě)疊代對象

相關(guān)案例查看更多