天天看點

Flask架構的幾個設計理念

其實這篇可看也可以不看。先說一下django的MTV模型(為啥是django呢,因為我之前學的是django)。

Flask架構的幾個設計理念

MTV模型

所謂的MTV ( Model–Template–View ),翻譯一下就是模型、模闆、視圖。一般是使用者通過浏覽器向我們的伺服器發起一個請求(request),這個請求回去通路視圖函數,(如果不涉及到資料調用,那麼這個時候視圖函數傳回一個模闆也就是一個網頁給使用者),視圖函數調用模型,模型去資料庫查找資料,然後逐級傳回,視圖函數把傳回的資料填充到模闆中空格中,最後傳回網頁給使用者。

flask同樣也遵循這個MTV模型。使用者發起一個請求,flask調用視圖函數進行響應。

程式和請求上下文

Flask從用戶端收到請求時,要讓視圖函數能通路一些對象,這樣才能處理請求。Flask使用請求對象封裝了用戶端發送的HTTP請求,傳遞給視圖函數。

此外,Flask使用上下文臨時把某些對象變為全局可通路

上下文分為

程式上下文

請求上下文

請求排程

程式收到用戶端發來的請求時,需要找到處理該請求的視圖函數。Flask會在程式的URL映射中查找請求的URL。URL映射是URL和視圖函數之間的對應關系。Flask使用<u>app.route()</u>修飾器或非修飾器<u>app.add_url_rule()</u>生成映射。

請求鈎子

主要在處理請求之前或之後執行代碼時使用。請求鈎子使用修飾器實作

  • before_first_request在處理第一個請求之前運作注冊的函數
  • before_request 在每次請求前運作注冊的函數
  • after_request 在每次請求之後運作未出錯的注冊函數
  • teardown_request 在每次請求之後運作注冊函數,無視異常

響應

Flask調用視圖函數後,會将其傳回值作為響應的内容,狀态碼為200。

視圖函數傳回的響應可以接受三個參數,通常不用到第三個。

  1. 響應内容
  2. 狀态碼
  3. header字典

    例子如下:

    @app.route('/')

    def index():

    return '<h1> Bad request </h1>', 400

    此外還有重定向(redirect),特殊響應(abort)