成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

mumumu / 1586人閱讀

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

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

源碼:Lib/wsgiref

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

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

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

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

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

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

wsgiref.util.guess_scheme(environ)

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

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

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

wsgiref.util.application_uri(environ)

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

wsgiref.util.shift_pathi_info(environ)

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

# 源碼
# 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)境變量。

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

這個(gè)理性城市,是為了建立一個(gè)環(huán)境,讓W(xué)SGI和應(yīng)用的單元測試變得更簡單。不應(yīng)該應(yīng)用在真實(shí)的WSGI服務(wù)器上,因?yàn)閿?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下運(yùn)行會(huì)出錯(cuò),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)

一個(gè)把類文件對(duì)象轉(zhuǎn)變?yōu)槌傻鞯陌b器。結(jié)果支持`__getitem__()`和`__iter__()`。當(dāng)?shù)闅v這個(gè)對(duì)象時(shí),`blksize`參數(shù)會(huì)被重復(fù)地傳給類文件對(duì)象地`read()`方法,獲取產(chǎn)生的字節(jié)。當(dāng)`read()`產(chǎn)生空字節(jié)時(shí),迭代結(jié)束。
如果這個(gè)類文件對(duì)象有`close()`方法,返回的對(duì)象也有`close()`方法,當(dāng)被調(diào)用時(shí),會(huì)激活類文件對(duì)象的`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 頭工具

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

wsgiref.headers.Headers([headers])

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

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

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

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

get_all(name)

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

返回順序?yàn)樗麄冊谧畛醯念^中的位置,或者他們被添加進(jìn)實(shí)例的順序??赡軙?huì)重復(fù)。

add_header(name, value, **_params)

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

在參數(shù)名里的下劃線會(huì)被轉(zhuǎn)換成連接符。因?yàn)檫B接符在python標(biāo)識(shí)符中不合法,但在MIME參數(shù)中有很多連接符。

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

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

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

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

wsgirfe.simple_server.demo_app(environ, start_response)

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

wsgiref.simple_server.WSGIServer(server_address, RequestsHandlerClass)

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

你不需要正式調(diào)用構(gòu)造器,因?yàn)?b>make_server()函數(shù)會(huì)幫你處理細(xì)節(jié)。

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

set_app(application)

設(shè)置一個(gè)可調(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實(shí)例而存在。

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

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

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

get_environ()

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

get_stderr()

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

handle()

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

wsgirref.validate WSGI一致性檢查器

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

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

這個(gè)模塊基于Python Paste。

wsgiref.validate.validator(application)`

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

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

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

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

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

wsgiref.hanlder.CGIHandler

通過sys.stdin, sys.stdout, sys.stderros.environ喚起CGI。當(dāng)你想要通過一個(gè)CGI腳本運(yùn)行一個(gè)WSGI程序時(shí)很有用。你可以使用CGIHandler().run(app)。

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

wsgiref.handler.IISCGIHandler

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

wsgiref.handlers.BaseCGIHandler()

CGIHandler類 類似。

wsgiref.handlers.BaseHandler

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

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

run(app)

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41143.html

相關(guān)文章

  • 通讀Python官方文檔cgitb

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

    laoLiueizo 評(píng)論0 收藏0
  • 通讀Python官方文檔cgitb

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

    KunMinX 評(píng)論0 收藏0
  • 通讀Python官方文檔cgi

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

    lncwwn 評(píng)論0 收藏0
  • 通讀Python官方文檔cgi

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

    thursday 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<