国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Flask基本工作流程

IT那活兒 / 1471人閱讀
Flask基本工作流程

點擊上方“IT那活兒”,關注后了解更多精彩內容!!

什么是WSGI

這里先需要說一個概念,什么是WSGI。
WSGI 的官方定義是,the Python Web Server Gateway Interface。從名字就可以看出來,這東西是一個Gateway,也就是網關。網關的作用就是在協議之間進行轉換。
WSGI 是作為 Web 服務器與 Web 應用程序或應用框架之間的一種低級別的接口,以提升可移植 Web 應用開發的共同點。WSGI 是基于現存的 CGI 標準而設計的。
很多框架都自帶了 WSGI server ,比如 Flask,webpy,Django、CherryPy等等。當然性能都不好,自帶的 web server 更多的是測試用途,發布時則使用生產環境的 WSGI server或者是聯合 nginx 做 uwsgi 。

 WSGI具體的功能

上面講到了WSGI可以起到一個接口的功能,前面對接服務器,后面對接app的具體功能。
我們先來看看最簡單的一個wsgi_app的實現:
def application(environ, start_response):
#一個符合wsgi協議的應用程序應該接受2個參數  :
start_response(200 OK, [(Content-Type, text/html)])
#environ為http的相關信息;
 return [b

Hello, world!

]
#return出來是響應內容。
但是,作為app本身,你就算啟動了程序,你也沒辦法給application傳遞參數。
所以,實際上,調用application和傳遞2個參數的動作,是服務器來進行的,比如Gunicorn。
而這個叫做application的東西,在Flask框架內部的名字,叫做wsgi_app。

Flask和WSGI

我們再來看下生成flask應用的操作寫法:
from flask import Flask 
app = Flask(__name__) #生成app實例

@app.route(/index)

def index():  
return Hello World
這樣,一個flask app就生成了。
當你的gunicorn收到http請求,去調用app的時候,他實際上是用了Flask 的 __call__方法。因此__call__方法怎么寫,決定了你整個流程從哪里開始。
那我們來看下Flask類的__call__方法的源碼:
class Flask(_PackageBoundObject): #Flask類 

   ...

 def __call__(self, environ, start_response): #Flask實例的__call__方法

return self.wsgi_app(environ, start_response) #
注意他的return,他返回的時候,實際上是調用了wsgi_app這個函數。
我們便知道,當http請求從server發送過來的時候,他會啟動__call__功能,最終實際是調用了wsgi_app功能并傳入environ和start_response。

WSGI_APP的內部流程

第一步:生成request請求對象和請求上下文環境:
首先,你會看到ctx = self.request_context(environ)的語句,這個涉及到Flask使用了請求上下文和應用上下文的概念,結構為棧結構。
第二步:請求進入預處理,錯誤處理及請求轉發到響應的過程:
進入wsgi_app的函數內部,生成了request對象和上下文環境之后,進入到try...except。
response = self.full_dispatch_request()
我們看到,響應被賦值成了full_dispatch_request()方法的返回內容,所以我們來看一下full_dispatch_request方法。
class Flask(_PackageBoundObject): 

 def full_dispatch_request(self):
   self.try_trigger_before_first_request_functions() #進行發生真實請求前的處理

   try:  

     request_started.send(self) #socket部分的操作

     rv = self.preprocess_request() #進行請求的預處理

     if rv is None:  

       rv = self.dispatch_request()

   except Exception as e:  

     rv = self.handle_user_exception(e)

   response = self.make_response(rv)

   response = self.process_response(response)

   request_finished.send(self, response=response)

   return response
他首先會觸發 try_trigger_before_first_request_function()方法, 在方法內部 會觸發 _got_first_request 屬性,這個屬性的返回值是True或者False,True的話就代表了程序開始處理請求了。
第三步:返回到wsgi_app內部
流程走回到了wsgi_app的內部。
下面這段是wsgi_app內部的代碼:
try: 

 try:

   response = self.full_dispatch_request()

 except Exception as e:

   error = e

   response = self.make_response(self.handle_exception(e))

 return response(environ, start_response)

finally:

 if self.should_ignore_error(error):

   error = None

 ctx.auto_pop(error)
當response從剛剛的full_dispatch_request功能返回之后,函數會對這個response加上environ, start_response的參數并返回給Gunicorn。
至此,一個HTTP從請求到響應的流程就完畢了。

本 文 原 創 來 源:IT那活兒微信公眾號(上海新炬王翦團隊)


文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129703.html

相關文章

  • Flask Web Development —— 基本應用程序結構(下)

    摘要:有兩類應用級和請求級。一個響應中非常重要的部分是狀態碼,默認設置來指示請求已經成功處理。重定向通常由響應狀態碼注明并且重定向的由頭部的給出。因為這些變化,應用程序獲得一組基本的命令行選項。運行顯示可用信息在應用程序上下文的內部運行一個。 5、請求-響應循環 現在你已經玩過一個基本的Flask應用程序,你也許想要知道更多關于Flask如何施展魔力。下面章節描述了一些框架設計方面的特點。...

    caohaoyu 評論0 收藏0
  • flask源碼走讀

    摘要:另外,如果你對模板渲染部分的內容感興趣,也可以考慮閱讀文檔文檔文檔源碼閱讀,可以參考下面的函數打斷點,再測試一個請求,理清過程。 Flask-Origin 源碼版本 一直想好好理一下flask的實現,這個項目有Flask 0.1版本源碼并加了注解,挺清晰明了的,我在其基礎上完成了對Werkzeug的理解部分,大家如果想深入學習的話,可以參考werkzeug_flow.md. 閱讀前 為...

    Coly 評論0 收藏0
  • python大佬養成計劃----Flask藍圖

    摘要:使用藍圖的概念來制作應用程序組件和支持應用程序內部或跨應用程序的通用模式。藍圖可以大大簡化大型應用程序的工作方式,并為擴展提供了在應用程序上注冊操作的中心手段。相反,它是如何構造或擴展應用程序的藍圖。 藍圖 之前我們已經通過代碼了解了一些Flask基本的用法,現在出現一個問題,我們要做的功能越來越多,路由是不是都要放在run文件中呢?例如我們在不同的文件都定義了一些路由,如果想要訪問他...

    tianyu 評論0 收藏0
  • 使用Visual Studio Code編寫調試Python Flask程序

    摘要:最近由于工作關系,開始寫程序,同事有用的,有用的。第一種適合及以上版本,因為在版本起,出現了文件,配置可以寫成用文件啟動程序,實測可以觸發斷點。 最近由于工作關系,開始寫flask web程序,同事有用Vim的,有用PyCharm的。在調研了一通python的編輯器,IDE之后,發現Visual Studio Code相對比較適合我。 VSC有相對較全的功能,比較好看舒服的主題,良好的...

    gotham 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<