視圖函數的返回值將自動轉換為您的響應對象。如果返回值為字符串,則將其轉換為響應對象,並將該字符串作為響應主體, 狀態碼和text / html mimetype。如果返回值是一個dict,則調用以產生響應。Flask用於將返回值轉換為響應對象的邏輯如下:200 OK
jsonify()
- 如果返回正確類型的響應對象,則直接從視圖中返回它。
- 如果是字符串,則使用該數據和默認參數創建一個響應對象。
- 如果是字典,則使用創建響應對象
jsonify
。 - 如果返回一個元組,則該元組中的項目可以提供額外的信息。這樣的元組必須在形式 ,或 。該值將覆蓋狀態代碼,並且可以是其他標頭值的列表或字典。
(response, status)
(response, headers)
(response, status, headers)
status
headers
- 如果這些都不起作用,則Flask將假定返回值是有效的WSGI應用程序,並將其轉換為響應對象。
如果要在視圖中保留結果響應對象,可以使用該make_response()
函數。
想像一下,您有這樣的看法:
@app.errorhandler(404)
def not_found(error):
return render_template('error.html'), 404
您只需要將return表達式包裝為 make_response()
並獲取響應對象即可對其進行修改,然後將其返回:
@app.errorhandler(404)
def not_found(error):
resp = make_response(render_template('error.html'), 404)
resp.headers['X-Something'] = 'A value'
return resp
JSON
編寫API時,常見的響應格式是JSON。開始使用Flask編寫這樣的API很容易。如果dict
從視圖返回a ,它將被轉換為JSON響應。
@app.route("/me")
def me_api():
user = get_current_user()
return {
"username": user.username,
"theme": user.theme,
"image": url_for("user_image", filename=user.image),
}
根據您的API設計,您可能想為以外的類型創建JSON響應dict
。在這種情況下,請使用 jsonify()
函數,該函數將序列化所有受支持的JSON數據類型。或者查看支持更複雜應用程序的Flask社區擴展。
@app.route("/users")
def users_api():
users = get_all_users()
return jsonify([user.to_json() for user in users])
Log
app.logger.debug('A value for debugging')
app.logger.warning('A warning occurred (%d apples)', 42)
app.logger.error('An error occurred')