五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動(dòng)態(tài)

python 內(nèi)置庫(kù)wsgiref的使用(WSGI基礎(chǔ)入門)

發(fā)布日期:2022-03-16 09:06 | 文章來(lái)源:源碼中國(guó)

WSGI基本原理

1. WSGI處理過(guò)程

  1. 瀏覽器到WSGI Server:瀏覽器發(fā)送的請(qǐng)求會(huì)先到WSGI Server。
  2. environ:WSGI Server會(huì)將HTTP請(qǐng)求中的參數(shù)等信息封裝到environ(一個(gè)字典)中。
  3. WSGI Server到WSGI App:App就是我們自己編寫(xiě)的后臺(tái)程序,每個(gè)URL會(huì)映射到對(duì)應(yīng)的入口處理函數(shù)(或其他可調(diào)用對(duì)象),WSGI Server調(diào)用后臺(tái)App時(shí),會(huì)將environ和WSGI Server中自己的一個(gè)start_response函數(shù)注入到后臺(tái)App中。
  4. 邏輯處理:后臺(tái)函數(shù)(或其他可調(diào)用對(duì)象)需要接收environ和start_response,進(jìn)行邏輯處理后返回一個(gè)可迭代對(duì)象,可迭代對(duì)象中的元素為HTTP正文。
  5. WSGI App到WSGI Server:后臺(tái)函數(shù)處理完后,會(huì)先調(diào)用start_response函數(shù)將HTTP狀態(tài)碼、報(bào)文頭等信息(響應(yīng)頭)返回給WSGI Server,然后再將函數(shù)的返回值作為HTTP正文(響應(yīng)body)返回給WSGI Server。
  6. WSGI Server到瀏覽器:WSGI Server將從App中得到的所有信息封裝為一個(gè)response返回給瀏覽器。

2. WSGI示例

wsgiref簡(jiǎn)單示例

運(yùn)行以下示例程序后,在瀏覽器中輸入以http://127.0.0.1:9999/開(kāi)頭的隨意一個(gè)url都可以看到返回結(jié)果。實(shí)例程序中所有url都會(huì)以同一個(gè)App進(jìn)行處理,實(shí)際生產(chǎn)環(huán)境中不同的url肯定是需要映射到不同的App上的,但這部分本文不作講解。

# wsgiref是Python自帶的內(nèi)置庫(kù),它用來(lái)開(kāi)發(fā)者對(duì)wsgi進(jìn)行測(cè)試用的,不可以用在生產(chǎn)環(huán)境中
from wsgiref.simple_server import make_server, demo_app
# wsgi也是基于socket server編寫(xiě)
# 默認(rèn)情況下會(huì)將所有url都傳入demo_app進(jìn)行處理,具體可參考demo_app源碼
# app參數(shù)可以是任何可調(diào)用對(duì)象,但是內(nèi)部處理需要參考demo_app源碼,即environ處理、start_response調(diào)用、返回值類型
ws = make_server('127.0.0.1', 9999, demo_app)
# 啟動(dòng)服務(wù)
ws.serve_forever()

demo_app源碼

def demo_app(environ,start_response):
 from io import StringIO
 stdout = StringIO()
 print("Hello world!", file=stdout)
 print(file=stdout)
 # environ是一個(gè)字典,包含了所有請(qǐng)求信息
 h = sorted(environ.items())
 for k,v in h:
  print(k,'=',repr(v), file=stdout)
 # return之前需要調(diào)用start_response設(shè)置響應(yīng)頭信息
 start_response("200 OK", [('Content-Type','text/plain; charset=utf-8')])
 return [stdout.getvalue().encode("utf-8")]  # 一個(gè)可迭代對(duì)象,元素為byte類型,元素內(nèi)容依據(jù)start_response中指定的Content-Type來(lái)指定

demo_app類定義的兩種方式

# 第一種方式:定義類的__init__和__iter__方法,前者用來(lái)接收和處理environ和start_response,后者生成一個(gè)可迭代對(duì)象
# make_server中app參數(shù)只需傳入類名即可
class ApplicationClass:
 def __init__(self, environ, start_response):
  self.e = environ
  self.sr = start_response
  
 def __iter__(self):
  from io import StringIO
  stdout = StringIO()
  print("Hello world!", file=stdout)
  print(file=stdout)
  h = sorted(self.e.items())
  for k, v in h:
print(k, '=', repr(v), file=stdout)
  self.sr("200 OK", [('Content-Type', 'text/plain; charset=utf-8')])
  yield from [stdout.getvalue().encode("utf-8")]
  
  
# 第二種方式:定義__call__方法,接收和處理environ和start_response,并返回一個(gè)可迭代對(duì)象
# make_server中app參數(shù)需要傳入類的實(shí)例
class ApplicationInstance:
 def __call__(self, environ, start_response):
  from io import StringIO
  stdout = StringIO()
  print("Hello world!", file=stdout)
  print(file=stdout)
  h = sorted(environ.items())
  for k, v in h:
print(k, '=', repr(v), file=stdout)
  start_response("200 OK", [('Content-Type', 'text/plain; charset=utf-8')])
  return [stdout.getvalue().encode("utf-8")]

3. WSGI web服務(wù)器和應(yīng)用程序

WSGI web服務(wù)器

  • 本質(zhì)上是一個(gè)TCP服務(wù)器,監(jiān)聽(tīng)在特定的端口上。
  • 支持HTTP協(xié)議,能夠解析HTTP請(qǐng)求報(bào)文,能夠按HTTP協(xié)議將響應(yīng)數(shù)據(jù)封裝為報(bào)文并返回給瀏覽器。
  • 實(shí)現(xiàn)了WSGI協(xié)議,該協(xié)議約定了和應(yīng)用程序之間的接口,即url到app之間的映射。

WSGI應(yīng)用程序

  • 遵從WSGI協(xié)議。
  • 本身是一個(gè)可調(diào)用對(duì)象。
  • 調(diào)用start_response,返回響應(yīng)頭部。
  • 返回包含正文的可迭代對(duì)象。

以上就是python 內(nèi)置庫(kù)wsgiref的使用(WSGI基礎(chǔ)入門)的詳細(xì)內(nèi)容,更多關(guān)于python wsgiref的使用的資料請(qǐng)關(guān)注本站其它相關(guān)文章!

美國(guó)服務(wù)器租用

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部