wsgi, 可能很多做python web 開發同學的都聽過, 但是 wsgi 是什麼, 用來幹什麼,今天我說一些自己的理解,有錯誤的地方或者描述不當的地方,望指正。
webserver 顧名思義 就是提供web服務, 包括靜態頁面和動態頁面。那麼當伺服器接受到來自client的請求之後,他是如何和我們的web 應用進行通訊的 ,這就是wsgi的作用。 接受http請求 解析http 傳送 響應 這些比較底層的工作 就是wsgi的工作。於是 python 就有了wsgi介面 ,那些工作都交給wsgi處理, 而我們更專注用python 來實現業務層面的邏輯。
話不多說,先上一段** 利用socket 實現乙個簡易的伺服器
做過web開發的同學 應該都對http協議有一定的了解, 我在這裡只做簡單描述
當我們在瀏覽器輸入例如 http://loalhost:5000/test 這樣的url 他其實是有 protocol:host_name:port/path 這樣的形式組成的
在你的瀏覽器能夠傳送 http 請求之前,它需要與 web 伺服器建立乙個 tcp 連線。然後會在 tcp 連線中傳送 http 請求,並等待伺服器返回 http 響應
接下來看看wsgi
# *-* coding: utf-8 *-*
import socket
import stringio
class wsgiserver(object):
address_family = socket.af_inet
socket_type = socket.sock_stream
request_queue_size = 5
def __init__(self, address):
self.socket = socket.socket(self.address_family, self.socket_type)
self.socket.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)
self.socket.bind(address)
self.socket.listen(self.request_queue_size)
self.host, self.port = self.socket.getsockname()
self.server_name = socket.getfqdn(self.host)
def server_forever(self):
print "start listting"
while 1:
self.connection, client_address = self.socket.accept()
print "recive a request!"
self.request_handler()
def request_handler(self):
self.request_data = self.connection.recv(1024)
self.parse_request()
env = self.get_env()
self.finish_response(result)
def parse_request(self):
request_data = self.request_data.splitlines()
request_line = request_data[0].strip('\r\n')
self.request_method, self.request_path, self.request_version = request_line.split()
def get_env(self):
env = {}
# wsgi必要引數
env['wsgi.input'] = stringio.stringio(self.request_data) #返回乙個
env['wsgi.errors'] = sys.stderr
env['wsgi.multithread'] = false
env['wsgi.multiprocess'] = false
env['wsgi.run_once'] = false
### cgi 必需變數
env['request_method'] = self.request_method # get
env['path_info'] = self.request_path # 請求路徑
對於這個請求 他的工作 流程大概是這樣子的:
web 框架或應用生成 http 狀態碼和 http 響應頭部,然後將它傳給 start_response 函式,伺服器會將其儲存起來。同時,web 框架或應用也會返回 http 響應正文。
伺服器將狀態碼、響應頭部及響應正文組裝成乙個 http 響應,然後將其傳送至客戶端
或者更詳細一點:
然後,伺服器讀取乙個請求
然後,伺服器會解析這個請求
然後,伺服器會使用請求資料來構建乙個 environ 字典
最終,伺服器將 http 響應回送給客戶端
貝殼介面庫記錄1 介面圓角實現
這段時間來對貝殼介面庫的學習,對現實技術和細節已經非常熟悉了。做一些總結。一般寫圓角的時候直接不onsize裡 hrgn hrgn createroundrectrgn 0,0,601,440,8,8 setwindowrgn m hwnd,hrgn,true 會寫css的對上面的圖形結構一定不陌生...
python實現介面自動化(1)
http簡介 http協議是什麼呢,是乙個基於 請求 與 響應 模式的,無狀態,應用層的協議 url詳解 http https 為兩種協議型別,第一種為不加密的,第二種加密的 www.baidu.com 稱為主機位址或者網域名稱 192.168.1.1 8080 位址加埠號 localhost808...
C 介面類實現的簡單例子(1)
介面是乙個沒有被實現的特殊的類,它是一系列操作的集合,我們可以把它看作是與其他物件通訊的協議。c 中沒有提供類似inte ce這樣的關鍵 字來定義介面,但是mircrosoft c 中提供了 declspec novtable 來修飾乙個類,來表示該類沒有虛函式表,也就是虛函式都是純虛的。所以利用它...