真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

淺談flask源碼之請求過程-創(chuàng)新互聯(lián)

Flask

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了鄞州免費建站歡迎大家使用!

Flask是什么?

Flask是一個使用 Python 編寫的輕量級 Web 應(yīng)用框架, 讓我們可以使用Python語言快速搭建Web服務(wù), Flask也被稱為 "microframework" ,因為它使用簡單的核心, 用 extension 增加其他功能

為什么選擇Flask?

我們先來看看python現(xiàn)在比較流行的web框架

  • Flask
  • Django
  • Tornado
  • Sanic

Flask: 輕, 組件間松耦合, 自由、靈活,可擴展性強,第三方庫的選擇面廣的同時也增加了組件間兼容問題

Django: Django相當(dāng)于一個全家桶, 幾乎包括了所有web開發(fā)用到的模塊(session管理、CSRF防偽造請求、Form表單處理、ORM數(shù)據(jù)庫對象化、模板語言), 但是相對應(yīng)的會造成一個緊耦合的情況, 對第三方插件不太友好

Tornado: 底層通過eventloop來實現(xiàn)異步處理請求, 處理效率高, 學(xué)習(xí)難度大, 處理稍有不慎很容易阻塞主進程導(dǎo)致不能正常提供服務(wù), 新版本也支持asyncio

Sanic: 一個類Flask框架, 但是底層使用uvloop進行異步處理, 可以使用同步的方式編寫異步代碼, 而且運行效率十分高效.

WSGI

先來看看維基百科對WSGI的定義

Web服務(wù)器網(wǎng)關(guān)接口(Python Web Server Gateway Interface,縮寫為WSGI)是為Python語言定義的Web服務(wù)器和Web應(yīng)用程序或框架之間的一種簡單而通用的接口.

何為網(wǎng)關(guān), 即從客戶端發(fā)出的每個請求(數(shù)據(jù)包)第一個到達的地方, 然后再根據(jù)路由進行轉(zhuǎn)發(fā)處理. 而對于服務(wù)端發(fā)送過來的消息, 總是先通過網(wǎng)關(guān)層, 然后再轉(zhuǎn)發(fā)至客戶端

那么可想而知, WSGI其實是作為一個網(wǎng)關(guān)接口, 來接受Server傳遞過來的信息, 然后通過這個接口調(diào)用后臺app里的view function進行響應(yīng).

先看一段有趣的對話:

Nginx:Hey, WSGI, 我剛收到了一個請求,我需要你作些準(zhǔn)備, 然后由Flask來處理這個請求.
WSGI:OK, Nginx. 我會設(shè)置好環(huán)境變量, 然后將這個請求傳遞給Flask處理.
Flask:Thanks. WSGI給我一些時間,我將會把請求的響應(yīng)返回給你.
WSGI:Alright, 那我等你.
Flask:Okay, 我完成了, 這里是請求的響應(yīng)結(jié)果, 請求把結(jié)果傳遞給Nginx.
WSGI:Good job! Nginx, 這里是響應(yīng)結(jié)果, 已經(jīng)按照要求給你傳遞回來了.
Nginx:Cool, 我收到了, 我把響應(yīng)結(jié)果返回給客戶端.大家合作愉快~

對話里面可以清晰了解到WSGI、nginx、Flask三者的關(guān)系

下面來看看Flask中的wsgi接口(注意:每個進入Flask的請求都會調(diào)用Flask.__call__)

# 摘自Flask源碼 app.py
class Flask(_PackageBoundObject):
  # 中間省略
  def __call__(self, environ, start_response):
    return self.wsgi_app(environ, start_response)
      
  def wsgi_app(self, environ, start_response):
    # environ: 一個包含全部HTTP請求信息的字典, 由WSGI Server解包HTTP請求生成
    # start_response: WSGI Server提供的函數(shù), 調(diào)用可以發(fā)送響應(yīng)的狀態(tài)碼和HTTP報文頭,
    # 函數(shù)在返回前必須調(diào)用一次.
    :param environ: A WSGI environment.
    :param start_response: A callable accepting a status code,
      a list of headers, and an optional exception context to
      start the response.
    # 創(chuàng)建上下文
    ctx = self.request_context(environ)
    error = None
    try:
      try:
        # 把上下文壓棧
        ctx.push()
        # 分發(fā)請求
        response = self.full_dispatch_request()
      except Exception as e:
        error = e
        response = self.handle_exception(e)
      except:
        error = sys.exc_info()[1]
        raise
      # 返回結(jié)果
      return response(environ, start_response)
    finally:
      if self.should_ignore_error(error):
        error = None
        # 上下文出棧
        ctx.auto_pop(error)

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


新聞名稱:淺談flask源碼之請求過程-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://weahome.cn/article/dehjii.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部