国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

通讀Python官方文檔之wsgiref(未完成)

mumumu / 1576人閱讀

摘要:一般來說,這一例行程序用于處理請求的每一部分,例如把路徑作為一系列字典鍵值進行處理。,必須是按照中所規(guī)定地鍵值元組列表。行為時回車換行。這個包裝器也可能用模塊指明那些有問題的,但不完全違反的行為。

wsgirf-WSGI功能及參考實現(xiàn)

源碼:Lib/wsgiref

Web服務(wù)器網(wǎng)關(guān)接口(Web Server Gateway Interface, WSGI),是用Python寫的一個服務(wù)器軟件和web應(yīng)用之間的通用接口。使用通用接口,能夠使同一個應(yīng)用方便的被不同過的web服務(wù)器調(diào)用。

只有web服務(wù)器和軟件框架作者需要知道WSGI設(shè)計的細節(jié)和極端情況。你只需要安裝一個WSGI應(yīng)用或者用現(xiàn)有框架寫一個web應(yīng)用,并不需要知道WSGI的全部細節(jié)。

wsgirefWSGI細則的一個參考實現(xiàn),用于給web服務(wù)器和框架提供WSGI支持。它提供了處理WSGI環(huán)境變量、response頭和WSGI服務(wù)器基類的功能,一個服務(wù)于WSGI應(yīng)用的HTTP服務(wù)器demo,以及檢測WSGI服務(wù)器和應(yīng)用是否和WSGI細則(PEP 3333)是否一致的驗證工具。

wsgi官網(wǎng)獲取更多信息和相關(guān)教程。

wsgiref.util - WSGI環(huán)境工具

本模塊提供了一些列用于WSGI環(huán)境的適用功能。 根據(jù)PEP 3333WSGI環(huán)境是一個包含HTTP請求變量的字典。所有接受environ參數(shù)的函數(shù)都預(yù)期接受一個兼容于WSGI的字典。詳見PEP 3333

wsgiref.util.guess_scheme(environ)

通過檢查環(huán)境變量中的HTTPS,返回wsgi.url_schemehttp還是https
這個函數(shù)用于,創(chuàng)建一個包裝CGI或者FastCGI協(xié)議的網(wǎng)關(guān)。一般來說,提供這些協(xié)議的服務(wù)器,當使用SSL時,會提供一個值為"1", "yes"或者"on"的HTTPS變量。如果找到了,這個函數(shù)返回"https";否則,返回"http"。

wsgiref.util.request_uri(environ, include_query=True)

返回請求的URI,可選參數(shù)決定是否返回查詢字符串,使用PEP 3333中的"URL Reconstruction"算法。

wsgiref.util.application_uri(environ)

request_uri方法類似,除了忽略PATH_INFO 還有QUERY_STRING變量。返回結(jié)果為發(fā)起請求的應(yīng)用對象的基地址(base uri)。

wsgiref.util.shift_pathi_info(environ)

將環(huán)境變量中PAHT_INFO移動一個名字到SCRIPT_NAME,并返回。環(huán)境變量會被原地修改,如果你要保存原始值,存一個備份 。
如果PAHT_INFO中沒有剩余的路徑節(jié)段,返回None
一般來說,這一例行程序用于處理請求URI的每一部分,例如把路徑作為一系列字典鍵值進行處理。這一例行程序,修改傳入的環(huán)境變量,使其用于激活目標URI的WSGI應(yīng)用。比如,在路徑/foo上有一個WSGI應(yīng)用,請求URI為/foo/bar/baz/foo處的WSGI應(yīng)用調(diào)用shift_path_info(),將會得到"bar",環(huán)境變量會被更新,使其傳向/foo/bar/處的WSGI應(yīng)用。也就是說SCRIPT_NAME/foo變?yōu)?b>/foo/bar,PATH_INFO/bar/baz變?yōu)?b>/baz。
當路徑僅為"/"時,該例行程序返回空字符串,并在SCRIPT_NAME處添加末尾斜杠。盡管空路徑片段一般都被忽略了。但SCRIPT_NAME一般不以斜杠結(jié)束。故意這樣設(shè)計,是為了讓應(yīng)用在做對象遍歷時,能夠區(qū)分/x/x/這兩個不同的路徑。

# 源碼
# https://github.com/python/cpython/blob/master/Lib/wsgiref/util.py#L102
if not name and not script_name.endswith("/"):
    script_name += "/"
wsgiref.util.setup_testing_defaults(environ)

為了測試而更新環(huán)境變量。

這個例行程序為WSGI添加各種參數(shù),包括HTTP_HOST, SERVER_NAME, SERVER_PORT, REQUESTS_METHOD, SCRIPT_NAME。以及PEP 3333中頂以的所有wsgi.*變量。只提供默認值,不替代現(xiàn)有值。

這個理性城市,是為了建立一個環(huán)境,讓WSGI和應(yīng)用的單元測試變得更簡單。不應(yīng)該應(yīng)用在真實的WSGI服務(wù)器上,因為數(shù)據(jù)都是假的。

from wsgiref.util import setup_testing_defaults
from wsgiref.simple_server import make_server

# A relatively simple WSGI application. It"s going to print out the
# environment dictionary after being updated by setup_testing_defaults
def simple_app(environ, start_response):
    # 創(chuàng)建虛假環(huán)境
    setup_testing_defaults(environ)

    status = "200 OK"
    headers = [("Content-type", "text/plain; charset=utf-8")]
    
    # 發(fā)送頭部
    start_response(status, headers)

    ret = [("%s: %s
" % (key, value)).encode("utf-8")
           for key, value in environ.items()]
    return ret

# 這行代碼我在3.6.1下運行會出錯,make_server不支持上下文管理?
# 把with 語句改成普通的語句好像就沒問題了。
with make_server("", 8000, simple_app) as httpd:
    print("Serving on port 8000...")
    httpd.serve_forever()

除了上述函數(shù),wsgiref.util還提供了其他各種功能。

wsgiref.util.is_hop_by_hop(header_name)

根據(jù)[RFC 2616](https://tools.ietf.org/html/rfc2616.html),如果`header_name`是`"Hop-by-Hop"`返回True.

wsgiref.util.FileWrapper(filelike, blksize=8192)

一個把類文件對象轉(zhuǎn)變?yōu)槌傻鞯陌b器。結(jié)果支持`__getitem__()`和`__iter__()`。當?shù)闅v這個對象時,`blksize`參數(shù)會被重復(fù)地傳給類文件對象地`read()`方法,獲取產(chǎn)生的字節(jié)。當`read()`產(chǎn)生空字節(jié)時,迭代結(jié)束。
如果這個類文件對象有`close()`方法,返回的對象也有`close()`方法,當被調(diào)用時,會激活類文件對象的`close()`方法。
from io import StringIO
from wsgiref.util import FileWrapper

# We"re using a StringIO-buffer for as the file-like object
filelike = StringIO("This is an example file-like object"*10)
wrapper = FileWrapper(filelike, blksize=5)

for chunk in wrapper:
    print(chunk)
wsgi.headers WSGI response 頭工具

本模塊只提供一個類:Headers。使用(mapping-like interface)映射接口, 方便操作地操作WSGI地響應(yīng)頭。

wsgiref.headers.Headers([headers])

創(chuàng)建一個映射對象包裝headersheaders,必須是按照PEP 3333中所規(guī)定地鍵值元組列表。默認值時一個空列表。】

Headers對象支持映射操作,包括__getitem()get(), __setitem()setdefault()__delitem(), 以及__contain__()。key是name,值是該name下的第一個值。

與字典不同,在你試圖刪除或者get一個不存在key時,Headers對象不會拋出異常。Headers的長度等于它items()的長度,

bytes()函數(shù),返回一個格式化的字符串,用于傳輸HTTP響應(yīng)頭。每個頭占一行,用冒號和控開關(guān)白分割。行為時回車+換行。結(jié)尾是一個空行

get_all(name)

返回對應(yīng)name下所有的值

返回順序為他們在最初的頭中的位置,或者他們被添加進實例的順序。可能會重復(fù)。

add_header(name, value, **_params)

添加一個頭,通過關(guān)鍵詞參數(shù)可以添加MIME參數(shù)。

在參數(shù)名里的下劃線會被轉(zhuǎn)換成連接符。因為連接符在python標識符中不合法,但在MIME參數(shù)中有很多連接符。

wsgiref.simple_server一個簡單的WSGI HTTP服務(wù)器

本模塊提供了一個簡單的基于http.server的,可服務(wù)于WSGI應(yīng)用的HTTP服務(wù)器。每一個服務(wù)器實例,在一個給定的主機和端口上服務(wù)于一個WSGI應(yīng)用。如果你想在一個主機和端口上,服務(wù)于多個應(yīng)用,你應(yīng)當創(chuàng)建一個WSGI應(yīng)用,解析PATH_INFO決定對于每個請求,應(yīng)該選擇哪個應(yīng)用。

wsgiref.simple_server.make_server(host, port, app, server_class=WSGIServer, handle_class=WSGIRequestHandler)

在指定host和port上,創(chuàng)建一個新的WSGI服務(wù)器,接受來自app的連接。返回值是傳入的server_class的一個實例。并會使用handler_class處理requests。app參數(shù)必須是一個符合PEP 3333定義的WSGI應(yīng)用對象。

wsgirfe.simple_server.demo_app(environ, start_response)

本函數(shù)是一個小而完全的WSGI程序,返回一個包含"Hello world!"和環(huán)境變量k-v值對的文本頁。用于確認WSGI服務(wù)器能夠爭取的處理WSGI程序。

wsgiref.simple_server.WSGIServer(server_address, RequestsHandlerClass)

創(chuàng)建一個WSGISever實例,server_address應(yīng)當是(host, port)元組,RequestHandlerClass應(yīng)當是http.server.BasedHTTPRequestHandler的子類,用于處理requests。

你不需要正式調(diào)用構(gòu)造器,因為make_server()函數(shù)會幫你處理細節(jié)。

WSGIServerhttp.server.HTTPServer的子類,所以繼承了其方法,如:serve_forever()handle_request()WSGIServer同時也提供了一些WSGI專有的方法。比如:

set_app(application)

設(shè)置一個可調(diào)用應(yīng)用,作為接收requests的WSGI應(yīng)用。

get_app()

返回目前設(shè)置的可調(diào)用應(yīng)用。

一般來說,你不要調(diào)用這些額外的方法。 set_app()一般有make_server()調(diào)用,get_app()主要是為了requests handler實例而存在。

wsgiref.simple_server.WSGIRequestHandler(reqeust, client_address, server)

對于給定的request(例如,一個socket), client_address (一個(host, port)元組)server,創(chuàng)建一個HTTP handler。

你不需要直接創(chuàng)建這個類的實例,他們會由WSGIServer對象按需創(chuàng)建。單你可以創(chuàng)建一個該類的子類,作為handler_class參數(shù),傳給make_server()函數(shù)。以下為一些在子類中可能相關(guān)的需要重寫的函數(shù)。

get_environ()

返回一個包含WSGI環(huán)境的字典。默認設(shè)置返回WSGIServer對象的base_environ字典屬性,并加上來自HTTP request的各種頭部。每次調(diào)用這個方法,都會放回一個新的字典,包含各種PEP 3333中規(guī)定的CGI環(huán)境變量。

get_stderr()

返回被用作wsgi.errors流的對象。默認設(shè)置返回sys.stderr

handle()

處理HTTP請求,默認這是使用wsgiref.hanlder類創(chuàng)建一個handler實例,執(zhí)行真實的WSGI應(yīng)用接口。

wsgirref.validate WSGI一致性檢查器

當創(chuàng)建新的WSGI應(yīng)用對象、框架、服務(wù)器和中間件時,用wsgiref.validate檢查新代碼是否可用是非常有用過的。本模塊提供了一個能創(chuàng)建WSGI應(yīng)用對象的函數(shù),使WSGI服務(wù)器和WSGI應(yīng)用對象能夠正常通信,檢查兩側(cè)協(xié)議的一致性。

注意這個應(yīng)用不保證完全符合PEP 3333。這個模塊不報錯,不意味著肯定沒錯。但是,如果這個模塊報錯,就意味著肯定有錯誤。不是100%兼容。

這個模塊基于Python Paste

wsgiref.validate.validator(application)`

包裝application并返回一個新的WSGI應(yīng)用對象,返回的應(yīng)用將會把所有的請求發(fā)送給最初的應(yīng)用。并且檢查這個應(yīng)用和啟動它的服務(wù)器是否遵循WSGI規(guī)則和RFC 2616

任何檢測到的不一致的結(jié)果,都會拋出一個AssertionError。但,如何處理這些異常取決于服務(wù)器。比如,wsgiref.simple_server和提前基于wsgiref.handlers的服務(wù)器,會直接輸出錯誤信息,將回溯信息輸出到sys.stderr或者其他錯誤流中。

這個包裝器也可能用warning模塊指明那些有問題的,但不完全違反PEP 3333的行為。除非用Python命令行選項或者是warning的api禁止,這些細心會被輸出至sys.stderr

wsgirf.handlers 服務(wù)器/網(wǎng)管基類

這個模塊提供了配置WSGI服務(wù)器和網(wǎng)關(guān)的基類。這些基類處理了大部分與一個WSGI應(yīng)用之間的通信,只要給與了他們一個CGI樣的環(huán)境,以及輸入/輸出及錯誤流。

wsgiref.hanlder.CGIHandler

通過sys.stdin, sys.stdout, sys.stderros.environ喚起CGI。當你想要通過一個CGI腳本運行一個WSGI程序時很有用。你可以使用CGIHandler().run(app)

這個類是BaseCGIHandler的子類,并將wsgi.run()=True, wsgi.multithread=False, wsgi.multiprocess=True,并使用sysos獲取必要的CGI流和環(huán)境。(參見CGI部分和前驅(qū)知識)

wsgiref.handler.IISCGIHandler

在微軟的IIS服務(wù)器上激活CGIHandler

wsgiref.handlers.BaseCGIHandler()

CGIHandler類 類似。

wsgiref.handlers.BaseHandler

一個抽象類。每個實例處理一個HTTP請求。盡管原則上你可以創(chuàng)建一個子類,從而能被多個請求服用。

只有一個方法能被外部調(diào)用。

run(app)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/41143.html

相關(guān)文章

  • 通讀Python官方文檔cgitb

    摘要:腳本異常管理源代碼模塊為腳本提供了一個特殊的異常管理器。該模塊激活后,如果發(fā)生了未捕獲的異常,將會展示格式化的輸出報告。該報告包括源代碼每一層的回溯,以及當前執(zhí)行程序的參數(shù)和局部變量。應(yīng)當是含有異常類型異常值和對象的三元組,如同返回的那樣。 cgitb CGI腳本異常管理 源代碼: Lib/cgitb.py cgitb模塊為Python腳本提供了一個特殊的異常管理器。名字有點誤導(dǎo)人,它...

    laoLiueizo 評論0 收藏0
  • 通讀Python官方文檔cgitb

    摘要:腳本異常管理源代碼模塊為腳本提供了一個特殊的異常管理器。該模塊激活后,如果發(fā)生了未捕獲的異常,將會展示格式化的輸出報告。該報告包括源代碼每一層的回溯,以及當前執(zhí)行程序的參數(shù)和局部變量。應(yīng)當是含有異常類型異常值和對象的三元組,如同返回的那樣。 cgitb CGI腳本異常管理 源代碼: Lib/cgitb.py cgitb模塊為Python腳本提供了一個特殊的異常管理器。名字有點誤導(dǎo)人,它...

    KunMinX 評論0 收藏0
  • 通讀Python官方文檔cgi

    摘要:最近添加的功能是通過表單上傳文件。腳本的輸出由兩部分組成,由一個空行分割。后者接受重復(fù)鍵值二進制文件等。方法會返回所有為的值。進行類型檢查是必須的,因為會有好事的用戶,輸入重復(fù)的鍵名。 cgi 通用網(wǎng)關(guān)接口 前驅(qū)知識 網(wǎng)關(guān)協(xié)議學習:CGI、FastCGI、WSGI 簡單點說: web服務(wù)器接受請求,啟動CGI;CGI接受請求,處理,返回給服務(wù)器;服務(wù)器返回給用戶 cgi效率不高,每...

    lncwwn 評論0 收藏0
  • 通讀Python官方文檔cgi

    摘要:最近添加的功能是通過表單上傳文件。腳本的輸出由兩部分組成,由一個空行分割。后者接受重復(fù)鍵值二進制文件等。方法會返回所有為的值。進行類型檢查是必須的,因為會有好事的用戶,輸入重復(fù)的鍵名。 cgi 通用網(wǎng)關(guān)接口 前驅(qū)知識 網(wǎng)關(guān)協(xié)議學習:CGI、FastCGI、WSGI 簡單點說: web服務(wù)器接受請求,啟動CGI;CGI接受請求,處理,返回給服務(wù)器;服務(wù)器返回給用戶 cgi效率不高,每...

    thursday 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<