視圖函數返回HTML模板:使用“from flask import render_template”,在函數中傳入相對於文件夾“templates”HTML模板路徑名稱字元串即可,flask會自動到項目根目錄的“templates”文件夾(創建flask項目時,PyCharm會自動創建兩個空文件夾, ...
視圖函數返回HTML模板:使用“from flask import render_template”,在函數中傳入相對於文件夾“templates”HTML模板路徑名稱字元串即可,flask會自動到項目根目錄的“templates”文件夾(創建flask項目時,PyCharm會自動創建兩個空文件夾,其中一個就是“templates”)下尋找對應的HTML文件;如果需要給HTML模板傳參,則在“render_template”中使用變數名或字典進行傳參即可(在Python2中,如果涉及中文,需要使用Unicode字元串)。如圖:
視圖函數返回Response對象:視圖函數返迴響應Response給瀏覽器,一般來說只能是字元串和固定格式的元組,當然也可以自定義,但無論是返回哪種數據格式,最終都是被包裝成一個Response對象返回給瀏覽器的。返回的是字元串時,其實也是被包裝成Response對象返回給瀏覽器的。也可以是一個固定格式的元組:(Response, status, headers),即響應體、狀態碼和頭信息的元組,可以只返回一個Response,或者兩個(Response, status),或者全部返回(Response, status, headers)。當可以自定義返回的響應體時需要註意以下幾點:
- Response子類:自定義的Response子類必須繼承自from flask import Response(其實就是from werkzeug.wrappers import Response)。
- response_class:使用app.response_class=MyResponse使之生效。
- force_type(response, environ=None):當返回的數據類型,既不是字元串,也不是元組時,flask就會調用Response的force_type方法來處理,如果不能處理就會返回錯誤,所以Response子類一般是需要重寫這個方法來返回一個合法的數據,參數response即為傳入的不合法的數據,可以經過處理後返回一個合法的Response對象。
-
1 from flask import Flask, Response 2 3 app = Flask(__name__) 4 5 6 class MyResponse(Response): 7 """自定義Response類""" 8 @classmethod 9 def force_type(cls, response, environ=None): 10 """重寫force_type方法,當參數既不是字元串, 11 也不是(Response, status, headers)元組時會調用此方法""" 12 if isinstance(response, list): 13 response = Response('+'.join(response)) 14 15 # 這裡需要包裝成Response對象才能傳入父類的force_type中, 16 # 只傳字元串會報錯 17 return super().force_type(response, environ) 18 19 20 # 指定自定義的Response類,使之生效 21 app.response_class = MyResponse 22 23 24 @app.route('/listresponse/') 25 def list_response(): 26 # 返回一個不合法的數據 27 # 如果沒有自定義的Response類來處理的話,就會報錯 28 return ['python', '36'] 29 30 31 if __name__ == '__main__': 32 app.run(debug=True)