Flask初學者:視圖函數和類視圖

當一個url請求進入後臺時,通常有兩種方式來進行處理:視圖函數和類視圖。視圖函數直接使用一個函數來進行處理並返回數據給瀏覽器,類視圖則是使用類來進行處理並返回的,因此當須要進行的處理比較簡單,則能夠考慮使用前者,處理比較複雜就考慮使用後者,可是最終仍是須要看使用環境和需求而定。html

視圖函數:瀏覽器

  1. 函數註冊:使用app.route裝飾器對函數進行註冊,或者使用add_url_rule進行註冊
  2. app.route(rule, endpoint, methods):
    • url:字符串類型,指定對應的url,參考https://www.cnblogs.com/guyuyun/p/9142860.html
    • endpoint:字符串類型,至關於給該url指定一個別名,通常用於url_for進行url反轉,能夠不指定該參數,若是沒有指定endpoint,則默認使用函數名,若是指定該參數,則必須使用該參數值,不然使用函數名會報錯
    • methods:列表類型,列表中爲該函數接收url的請求類型,好比GET、POST等,也能夠不指定該參數,表明接收全部類型的請求
  3. add_url_rule(rule, endpoint, view_func):若是用於註冊視圖函數,則rule和endpoint的使用和app.route同樣,view_func則是對應的視圖函數名稱(注意此處函數不要加括號),與app.route的不一樣在於,app.route是裝飾器,至關於自動進行了註冊,而add_url_rule則是手動進行註冊
  4. 函數返回值:能夠是HTML模板、字符串、response對象、response的子類或者固定格式的元組,參考https://www.cnblogs.com/guyuyun/p/9743441.html
  5. 自定義裝飾器:若是給視圖函數使用了自定義的裝飾器,那麼這個(些)裝飾器須要放在app.route裝飾器之下的位置。

 

標準類視圖:app

  1. 定義:類須要繼承Flask.views.View,而且重寫dispatch_request方法
  2. dispatch_request:當訪問到對應的url時,就會實例化這個類,並執行dispatch_request方法,並將這個方法的返回值返回給瀏覽器。dispatch_request其實也是一個視圖函數,因此它的返回值跟視圖函數同樣,必須是HTML模板,字符串,response對象,response對象的子類或者固定格式的元組。
  3. 類註冊:add_url_rule方法進行註冊,註冊方式與視圖函數基本一致,不過參數view_func跟視圖函數的使用有點區別,須要使用視圖類的as_view方法進行轉換,同時指定一個視圖名稱,如:app.add_url_rule(‘/my_url/’, ‘my_endpoint_name’, MyViewClass.as_view(‘my_view_name’))
  4. 自定義裝飾器:若是須要給dispatch_request使用自定義的裝飾器,那麼須要定義一個decorators的類變量,decorators能夠是元組或者列表,裏面存放的裝飾器的順序與視圖函數的從上到下的順序是一致的

 

請求類視圖:函數

  1. 定義:類須要繼承Flask.views.MethodView,而且定義對應的請求方法
  2. 請求方法:當對應的url訪問進來後就會根據url的請求方式查找對應的請求方法,並將該方法的返回值返回給瀏覽器,若是沒有定義對應的請求方法就會報錯,提示「Method Not Allowed」
  3. 類註冊:註冊方式和標準類視圖是相同的
  4. 自定義裝飾器:與標準類視圖是相同的
相關文章
相關標籤/搜索