Python3.6學習筆記(六)

WSGI Python Web Server Gateway Interface 規范學習

由于Python的靈活性,提供了多種方式可以作為服務端語言,包括Python編寫的服務器(Medusa)、Python處理模塊(mod_python),或者使用CGI、FastCGI方式觸發Python腳本。 為了能夠編寫更通用的Web端程序,提出了WSGI接口作為標準接口規范,類似于Java中的Serverlet,一旦編寫完成后,可以運行在不同的App框架中。

WSGI接口涉及兩個方面:一面是:服務器(server)或網關(gateway),相對別一面是:應用程序(application)或框架(framework)。服務端運行由應用程或框架提供的可執行的對像實例,至于這個可執行對象的是如果獲得的細節,不在WSGI規范定義之內,而是同server或gataway去處理。

Application/Framework 端

Application端是一個callable term,可以是function、class、method等,接收兩個參數environ、start_response。當application被server調用時,必須返回一個iterable的bytestrings或者是zero(可以使用yield返回一個生成器)。

WSGI 是為框架或服務器開發人員提供的工具,而不是為應用人員提供的。

When called by the server, the application object must return an iterable yielding zero or more byte strings.

服務器調用時,應當以無緩存的形式將產生的內容發送給客戶端。

方法:len()、close()

Server/Gateway 端

中間件 Middleware 扮演兩個角色

Middleware常扮演以下角色:

  • 根據目標URL將請求路由到不同的Application進行處理
  • 允許多個Application或Framework運行在相同的進程中
  • 通過網絡內的請求轉發實現負載均衡和遠程處理
  • 實現內容的后續處理,例如XSL樣式表

中間件的存在對于服務端和應用端應該都是透明的。

environ 變量

environ 是一個字典變量。

變量名備注
REQUEST_METHODHTTP請求方法,GET、POST、PUT,不能為空
SCRIPT_NAME腳本名稱,可以為空
PATH_INFO請求URL中的一部分,可以為空
QUERY_STRING請求URL中問號(?)之后的部分,可以為空
CONTENT_TYPE請求中的Content_Type字段,可以為空
CONTENT_LENGTH請求中的Content_Length,可以為空
SERVER_NAME , SERVER_PORT不能為空
SERVER_PROTOCOL客戶端發送請求采用的協議及版本
HTTP_ 變量客戶端請求頭中的參數,可以為空

CGI方式需要提供的參數略有不同,具體可以參考PEP3333

A WSGI-compliant server or gateway should document what variables it provides, along with their definitions as appropriate. Applications should check for the presence of any variables they require, and have a fallback plan in the event such a variable is absent.

Input、Error流

服務器端必須支持以下幾個方法

方法
read(size)Input
readline()Input
readlines(hint)Input
iter()Input
flush()errors
write(str)errors
writelines(seq)errors

start_response()

方法示例start_response(status, response_headers, exec_info = None)

start_response 接收兩個參數start_response(status, response_headers),status是狀態返回信息,諸如“200 OK”或者“404 Not Found”,純文本,不能包含任何控制符號。response_headers是一個形如(header_name, header_value)的tuples,必須是Python的List。header_name必須是RFC2616中定義的名稱,header_value不包含結束符號及任何控制符號,包括換行等。

一般來說,服務器端負責確保發送的header的正確性,如果應用忽略了某個http頭參數,那么服務器應該給補充進去。

服務端應該檢查是否向客戶端發送了保持鏈接的頭參數,如果發現,應該拋出錯誤。

Content-Length 頭的處理

如果應用端提供了 Content-Length 請求頭,服務端不應當傳遞超過這個長度的內容。處理方式是停止發送內容,或產生一個報錯。如果沒有提供足夠的內容,則應正常關閉鏈接不產生錯誤。

如果沒有提供 Content-Length 頭,則服務端可以自己決定采用哪種處理方式,最簡單的就是響應結束后關閉鏈接。某些情況下,服務端可以自己產生 Content-Length , 或者盡量避免關閉鏈接。如果服務端和客戶端都支持 HTTP/1.1 分塊編碼,則服務端需要為每個塊提供一個 Content-Length。

緩存和流處理 Buffering and Streaming

write() callable

一些編程框架提供了緩存的 write() 函數以及一個 flush() 函數,用于刷新緩存,但是很遺憾標準的WSGI無法實現這個需求。但WSGI仍提供了一個特殊 write() 函數,來實現這些迫切的需求。

write() 由 start_response 返回,接收一個參數。一個應用必須返回一個 iterable 對象。

錯誤處理

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285900.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285900.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285900.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Markdown編輯器模板

這里寫自定義目錄標題歡迎使用Markdown編輯器新的改變功能快捷鍵合理的創建標題,有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、居右SmartyPants創建一個自定義列表如何創建一個注…

as3文本框的動態拖拽和編輯

如今非常多軟件都支持了編輯界面的文本拖拽和點擊編輯來直接改動數值, 這樣便于操作, 并且體驗性也好, 拋磚引玉吧 于是就用好久沒編寫的as3來寫了一下: 由于用的flash ide寫的沒有提示, 就臨時不做細節處理了, 假設用于project上會有點小問題, 只是不影響本效果展示 代碼: imp…

為 HttpClient 注冊自定義請求標頭

前言上次,我們介紹了《在 ASP.NET Core 中使用 HTTP 標頭傳播》。但是有時候,當服務間需要互相調用時,也需要將創建一些自定義標頭傳播到目標服務。比如, ServiceA 已經進行了身份驗證,那么當它調用 ServiceB 時&#…

圖片壓縮上傳Thumbnailator 插件

假如你現在還在為自己的技術擔憂,假如你現在想提升自己的工資,假如你想在職場上獲得更多的話語權,假如你想順利的度過35歲這個魔咒,假如你想體驗BAT的工作環境,那么現在請我們一起開啟提升技術之旅吧,詳情請…

jQuery實現登錄提示

實現效果&#xff1a;將鼠標聚焦到郵箱地址文本框時&#xff0c;文本框 內的“請輸入郵箱地址”文字將被清除&#xff1b; 若沒有輸入任何內容&#xff0c;鼠標移除后郵箱地址文本框被還原。 1 <!DOCTYPE html>2 <html>3 <head>4 <meta charset"…

C語言試題七十之請編寫函數判斷年份是否為閏年

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 編寫函數:…

js 通過jquery插件獲取url參數 其中的一個小問題,或許不算Bug。

形如&#xff1a;http://localhost:10864/srch.htm?keys&type1 這樣的地址&#xff0c;如果我們要取keys的參數&#xff1a; var srchKey $.query.get("keys"); 那么得到的將是‘true’ &#xff0c;而不是空客串&#xff0c;這常常不是我們想要的 。 修正辦法…

【Pix4d精品教程】未校準相機:287 out of 402 images calibrated (71%), all images enabled, 6 block,問題分析及解決方案匯總

文章目錄 問題描述原因分析問題分析問題解決問題描述 在使用pix4d處理航測數據時,部分航帶高精度檢測時,提示未校準相機: 287 out of 402 images calibrated (71%), all images enabled, 6 blocks 質量報告如下所示: 切換到【控三射線】,查看空山射線,紅色部分是校準失敗…

設置Windows 8.1屏幕自己主動旋轉代碼, Auto-rotate function code

程序代碼實現啟用或禁用Windows 8.1 Tablet的自己主動旋轉功能 方法一&#xff1a;使用SetDisplayAutoRotationPreferences函數功能 #include <Windows.h>/* typedef enum ORIENTATION_PREFERENCE { ORIENTATION_PREFERENCE_NONE 0x0, ORIENTATION_PRE…

四、函數修改器《2022 solidity8.+ 版本教程到實戰》

一、函數修改器 modifier 在 solidity 中有一個函數修改器可作為前置、中置或者后置方法&#xff0c;有點像 ASP.NET 中的母版頁&#xff08;最起碼差不多十年不碰了&#xff0c;不懂還有沒有這個概念&#xff09;&#xff0c;又有點像 ThinkPHP 中的前置方法&#xff0c;可以…

C#-基于ip2region的離線IP定位庫

前言在開發中&#xff0c;我們需要記錄關于登錄者的ip和位置信息&#xff0c;可以通過ip2region來實現&#xff01;比如說:qq&#xff0c;gitee等 我們在異地登錄時&#xff0c;會提醒我們賬號異地登錄&#xff01;外賣等軟件&#xff0c;需要地理位置&#xff0c;如果我們的gp…

【No.7 C++對象的構造與析構時間】

【注意】 程序語言只是我們與計算機交流并讓計算機實現我們創造性思想的工具&#xff0c;可以并鼓勵深入掌握一門語言&#xff0c;但千萬別沉迷于鉆某種語言的牛角尖&#xff0c;一定要把握好二者間的度本帖屬不定時連載貼&#xff0c;以試卷的形式提出一個比較基礎的問題供大家…

mysql按月進行表分區

數據庫 mysql 單表數據量達到千萬、億級&#xff0c;可以通過分表與表分區提升服務性能。 現有表accounting&#xff0c;4億條數據&#xff0c;數據訪問方式為insert與select&#xff0c;select為按月訪問&#xff0c;為減少數據與程序變更&#xff0c;采用表分區的方式。 數據…

C語言試題七十一之請編寫函數求出這個數的階乘

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 編寫函數:…

MFC 直線 虛線 折線 圓 橢圓 矩形 弧形

****Dlg.h頭文件加入&#xff1a; //為project加入畫筆、點變量數組 public:CPen m_pen[5];CPoint m_point[5]; public:void DrawLine(CDC *pDC);void DrawPolyline(CDC *pDC);void DrawPolygon(CDC *pDC);void DrawRect(CDC *pDC);void DrawRoundRect(CDC *pDC);void DrawElli…

最近無埋點技術很是流行,抽空研究了下諸葛IO,talkingData以及百分點這些業內知名公司的無埋點SDK,抽取其中重要的信息供大家參考:

1、首先什么是無埋點呢&#xff0c;其實所謂無埋點就是開發者無需再對追蹤點進行埋碼&#xff0c;而是脫離代碼&#xff0c;只需面對應用界面圈圈點點即可追加隨時生效的事件數據點。 無埋點的好處 其實無埋點并不是完全不用寫代碼&#xff0c;而是盡可能的少寫代碼。開發者將S…

【Pix4d精品教程】pix4d mapper相機未校準后手動添加連接點完美案例圖文教程

pix4d mapper相機未校準后手動添加連接點完美案例圖文教程 整體預覽 局部放大 如圖所示,紅色的照片為未校準的圖片,軟件無法自動獲取連接點,有關相機未校準的原因及解決辦法,可以參考《pix4d未校準相機:287 out of 402 images calibrated (71%), all images enabled, 6 bl…

五、構造函數《2022 solidity8.+ 版本教程到實戰》

一、構造函數 構造函數存在于很多語言中&#xff0c;可用于對當前對象在第一次創建時的初始化設置。在 solidity 合約中&#xff0c;也存在對應的構造函數&#xff0c;使用 constructor(){} 對其進行定義。 以下在合約中創建一個最簡單的構造函數代碼&#xff1a; // SPDX-L…

Blazor University (30)表單 —— 從 InputBase 派生

原文鏈接&#xff1a;https://blazor-university.com/forms/descending-from-inputbase/從 InputBase 派生源代碼[1]InputBase<T> 組件是各種 Blazor 輸入控件所繼承的抽象類。這個類在標準 HTML <input> 元素的基礎上增加了額外的功能&#xff0c;比如驗證——我們…

3.菜鳥教你一步一步開發 web service 之 axis 服務端創建

轉自&#xff1a;https://blog.csdn.net/shfqbluestone/article/details/37610601 第一步&#xff0c;新建一個工程&#xff0c;如圖&#xff1a; 選 Java 寫一個工程名&#xff0c;選擇好工程路徑&#xff0c;點下一步 選擇 webServices &#xff0c;在右邊的 version 中選擇 …