就是這樣!整個文件。稱其為app.py並使用任何與WSGI兼容的服務器運行,您將獲得200個狀態的Hello World響應。您可以使用槍龍;只需通過PIP(PIP安裝槍支)安裝它,然後使用Gunicorn App:App運行它。該命令告訴Gunicorn在應用模塊中的App變量中獲取WSGI可呼叫。
>現在,您應該非常興奮。一個運行應用程序只有3行?那一定是某種記錄(因為mod_php正在作弊,禁止PHP)。我敢打賭,您只是想了解更多。
>那麼,WSGI應用程序的重要部分是什麼?
>您可能已經在考慮可以使用此信息的方法,但最相關的信息可能是編寫中間Wares。
爵士樂<span>def app(environ, start_fn): </span> start_fn<span>('200 OK', [('Content-Type', 'text/plain')]) </span> <span>return ["Hello World!\n"] </span>
<span>class app(object): </span> <span>def __init__(self, environ, start_fn): </span> self<span>.environ = environ </span> self<span>.start_fn = start_fn </span> <span>def __iter__(self): </span> self<span>.start_fn('200 OK', [('Content-Type', 'text/plain')]) </span> <span>yield "Hello World!\n" </span>中間Wares是擴展WSGI應用程序功能的簡便方法。由於您只需要提供一個可可,因此您可以將其包裝在其他功能中。 例如,
,說我們要檢查環境的內容。我們可以輕鬆地創建一個中間件來這樣做,如此示例:
。
以這種方式編寫中間的優點是中間件和處理程序不必彼此了解或關心。例如,您可以輕鬆地將log_environ固定到燒瓶應用程序上,例如,燒瓶應用程序是WSGI應用程序。其他一些有用的中間件想法:
<span>class Application(object): </span> <span>def __call__(self, environ, start_fn): </span> start_fn<span>('200 OK', [('Content-Type', 'text/plain')]) </span> <span>yield "Hello World!\n" </span> app <span>= Application() </span>
>如果您不想使大金字塔成為文件的底部,則可以使用Reled來一次應用一堆中間件:
>您還可以通過利用start_fn參數來編寫修改響應的中間件。這是一個中間件,如果內容類型標頭為文本/平原,則可以逆轉輸出:
>由於start_fn和響應的分離,這有點糾結,但仍然完全可行。
<span>import pprint </span> <span>def handler(environ, start_fn): </span> start_fn<span>('200 OK', [('Content-Type', 'text/plain')]) </span> <span>return ["Hello World!\n"] </span> <span>def log_environ(handler): </span> <span>def _inner(environ, start_fn): </span> pprint<span>.pprint(environ) </span> <span>return handler(environ, start_fn) </span> <span>return _inner </span> app <span>= log_environ(handler) </span>>
還要注意,要嚴格與WSGI符合規格,我們必須在響應上檢查A
> CLOSE<span>import pprint </span> <span>def handle_error(handler): </span> <span>def _inner(environ, start_fn): </span> <span>try: </span> <span>return handler(environ, start_fn) </span> <span>except Exception as e: </span> <span>print e # Log error </span> start_fn<span>('500 Server Error', [('Content-Type', 'text/plain')]) </span> <span>return ['500 Server Error'] </span> <span>return _inner </span> <span>def wrap_query_params(handler): </span> <span>def _inner(environ, start_fn): </span> qs <span>= environ.get('QUERY_STRING') </span> environ<span>['QUERY_PARAMS'] = urlparse.parse_qs(qs) </span> <span>return handler(environ, start_fn) </span> <span>return _inner </span>方法,並在此處調用。傳統的WSGI應用程序也可以返回a
write
函數,而不是在調用處理程序後返回峰值。如果您希望您的中間件支持舊的應用程序,則可能需要處理這種情況。<span># Applied from bottom to top on the way in, then top to bottom on the way out </span>MIDDLEWARES <span>= [wrap_query_params, </span> log_environ<span>, </span> handle_error<span>] </span> app <span>= reduce(lambda h, m: m(h), MIDDLEWARES, handler) </span>>一旦您開始使用RAW WSGI稍微播放一點,您就會開始理解為什麼Python實際上擁有數十個網絡框架。 WSGI使從頭開始建立一些東西變得非常簡單。例如,您可能正在考慮路由的問題:
如果您享受 >
經常詢問有關Python Web應用程序和WSGI > WSGI在Python Web應用程序中的作用是什麼? >使用WSGI部署Python Web應用程序,涉及多個步驟。首先,您需要安裝WSGI服務器,例如Gunicorn或UWSGI。接下來,您需要配置Web服務器以使用WSGI服務器作為處理請求到應用程序的代理。這涉及修改服務器的配置文件以包括必要的WSGI設置。最後,您需要啟動WSGI服務器,並將其指向您的應用程序的WSGI文件。 > WSGI和ASGI和ASGI和ASGI? ASGI都是Python Web應用程序的接口,但它們的目的不同。 WSGI是一個同步接口,允許在Web服務器和Web應用程序之間進行通信。 ASGI或異步服務器網關接口是支持異步操作的WSGI的擴展。這意味著,使用ASGI,您的應用程序可以同時處理多個請求而不會阻止,從而使其在實時應用程序中更有效。 >在python Web應用程序中使用WSGI有什麼好處? 是的,您可以將WSGI與燒瓶一起使用。實際上,範圍為WSGI應用程序,默認情況下是WSGI應用程序。當您創建燒瓶應用程序時,實際上您正在創建一個WSGI應用程序,燒瓶框架將使用該應用程序來處理傳入請求並發送響應。 > WSGI中間件是位於WSGI服務器和WSGI應用程序之間的組件。它可以處理請求在將申請和響應發送回客戶之前,然後再處理。中間件可用於實現各種功能,例如會話管理,URL路由和身份驗證。 組裝庫的靈活性,可以直接與WSGI合作可以很好
但是服務器呢? 就是一切!
>
>
> python的一些流行的WSGI服務器是什麼?可用於Python,每種都有自己的優點和劣勢。一些最常用的包括槍,UWSGI和MOD_WSGI。 Gunicorn以其簡單性和易用性而聞名,而UWSGI則以其速度和效率而受到讚揚。另一方面,mod_wsgi是Apache服務器的模塊,通常用於企業環境中。>如何使用WSGI?
>我可以將WSGI與Django一起使用?實際上,Django附帶了一個內置的WSGI應用程序,您可以用來部署Django項目。 Django WSGI應用程序充當您的Django項目和Web服務器之間的橋樑,允許他們交流和交換請求和響應。
>如何在Python中創建WSGI應用程序? >在Python中創建WSGI應用程序涉及定義一個接受兩個參數的函數:環境字典和start_response collable。環境字典包含有關傳入請求的信息,而start_response collable用於啟動對請求的響應。您的功能應該返回產生響應主體的效果。
>
>我可以將WSGI與燒瓶使用WSGI? > WSGI中間件是什麼?
以上是Python Web應用程序:WSGI的基礎知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!