Python Web應用程序:WSGI的基礎知識
鑰匙要點
-
WSGI或Web服務器網關接口,基於所有Python Web框架,為Web服務器提供了一個常見的規範,該規範允許在不同的Web服務器和應用程序框架之間進行交互。
- > wsgi應用程序是一個可調用的python,必須接受兩個參數,即環境(一個包含請求數據的python dict)和start_fn(可召喚)。該應用程序必須使用兩個參數調用start_fn:狀態代碼和標題列表,並返回包含響應主體中字節的值 中間件可用於擴展WSGI應用程序的功能,中間件和處理程序不需要相互了解或關心。這使得添加諸如日誌記錄或錯誤處理之類的功能變得容易。 > WSGI應用程序可以通過多種方式提供,槍支和UWSGI是兩個流行的選擇。建議在這些面前設置類似Nginx的東西以提供靜態資產。
- 在Django,燒瓶,瓶子和其他所有Python Web框架之下,在Web Server網關接口或WSGI中,簡稱為空。 WSGI將Python python對Java的服務是什麼 - Web服務器的常見規範,允許不同的Web服務器和應用程序框架基於共同的API進行交互。但是,與大多數內容一樣,Python版本非常簡單。 PEP 3333中定義了
- wsgi,如果您想要更多信息,我鼓勵您作為參考閱讀。 >本文將從應用程序開發人員的角度向您介紹WSGI規格,並向您展示如何直接與WSGI合作以創建應用程序(如果您願意的話)。
- 您的第一個WSGI應用

就是這樣!整個文件。稱其為app.py並使用任何與WSGI兼容的服務器運行,您將獲得200個狀態的Hello World響應。您可以使用槍龍;只需通過PIP(PIP安裝槍支)安裝它,然後使用Gunicorn App:App運行它。該命令告訴Gunicorn在應用模塊中的App變量中獲取WSGI可呼叫。
>現在,您應該非常興奮。一個運行應用程序只有3行?那一定是某種記錄(因為mod_php正在作弊,禁止PHP)。我敢打賭,您只是想了解更多。
>那麼,WSGI應用程序的重要部分是什麼?
- wsgi應用程序是一個pythoncallable,例如函數,類或類實例,帶有__call __方法
- 應用程序必須接受兩個參數:環境,這是包含請求數據的python dict,並且start_fn,本身是一個可召喚的。 >應用程序必須使用兩個參數調用start_fn:狀態代碼(作為字符串),以及以2個tuples表示的標題列表。
- >應用程序返回一個可互動的,該字符在響應主體中,方便,可流的塊 - 在這種情況下,列出了包含“ Hello,World!”的字符串列表。 (如果應用程序是類,則可以在__ITER__方法中完成。
- 例如
>您可能已經在考慮可以使用此信息的方法,但最相關的信息可能是編寫中間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>
,說我們要檢查環境的內容。我們可以輕鬆地創建一個中間件來這樣做,如此示例:
>在這裡,log_environ是一個返回函數的函數,在推遲到原始回調之前,它可以很好地打印到環境參數。
。
以這種方式編寫中間的優點是中間件和處理程序不必彼此了解或關心。例如,您可以輕鬆地將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>
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>
如果您享受 >
經常詢問有關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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

該試點程序是CNCF(雲本機計算基礎),安培計算,Equinix金屬和驅動的合作,簡化了CNCF GitHub項目的ARM64 CI/CD。 該計劃解決了安全問題和績效

該教程通過使用AWS服務來指導您通過構建無服務器圖像處理管道。 我們將創建一個部署在ECS Fargate群集上的next.js前端,與API網關,Lambda函數,S3桶和DynamoDB進行交互。 Th

與這些頂級開發人員新聞通訊有關最新技術趨勢的了解! 這個精選的清單為每個人提供了一些東西,從AI愛好者到經驗豐富的後端和前端開發人員。 選擇您的收藏夾並節省時間搜索REL
