Flask自學筆記 (6):Flask的Response

視圖函數的返回值將自動轉換為您的響應對象。如果返回值為字符串,則將其轉換為響應對象,並將該字符串作為響應主體, 狀態碼和text / html mimetype。如果返回值是一個dict,則調用以產生響應。Flask用於將返回值轉換為響應對象的邏輯如下:200 OK jsonify()

  1. 如果返回正確類型的響應對象,則直接從視圖中返回它。
  2. 如果是字符串,則使用該數據和默認參數創建一個響應對象。
  3. 如果是字典,則使用創建響應對象jsonify
  4. 如果返回一個元組,則該元組中的項目可以提供額外的信息。這樣的元組必須在形式 ,或 。該值將覆蓋狀態代碼,並且可以是其他標頭值的列表或字典。(response, status) (response, headers) (response, status, headers) status headers
  5. 如果這些都不起作用,則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')