簡體   English   中英

如何在 after_request 函數中更改燒瓶中的響應?

[英]How do I alter a response in flask in the after_request function?

我是 Flask 和 python 的新手。 我有一堆視圖以 jsonify() 格式返回字典。 對於這些視圖中的每一個,我想添加一個 after_request 處理程序來更改響應,以便我可以向該字典添加一個鍵。 我有:

@app.route('/view1/')
def view1():
  ..
  return jsonify({'message':'You got served!'})

@app.after_request
def after(response):
  d = json.loads(response.response)
  d['altered'] = 'this has been altered...GOOD!'
  response.response = jsonify(d)
  return response

我得到的錯誤是“類型錯誤:列表索引必須是整數,而不是 str”。 如何在請求完成后更改響應字典並添加密鑰?

response是一個 WSGI 對象,這意味着響應的主體必須是可迭代的。 對於jsonify()響應,它只是一個只有一個字符串的列表。

但是,您應該使用這里的response.data屬性來檢索響應正文,因為這將使響應變得可迭代。

從 Flask 1.0 開始,您甚至不必從 JSON 解碼數據,您可以改用新的Response.get_json()方法

以下應該工作:

d = response.get_json()
d['altered'] = 'this has been altered...GOOD!'
response.data = json.dumps(d)

不要在這里再次使用jsonify() 返回一個全新的響應對象; 你想要的只是這里的 JSON 響應體。

您可以改為分配回response.data ,它將負責編碼回字節並調整Content-Length標頭以反映更改的響應大小。

這看起來有點舊,因為最后一個回復是四年前寫的。

似乎有一種方法可以在不解析響應數據字符串的情況下獲取響應。

response.get_json()

響應返回一個 dict 對象,但如果您嘗試更新非 dict 類型的鍵,則 Flask 會返回錯誤。 使用方法如下:

data = response.get_json()

if type(data) is dict:

    data['hi'] = 'hi'

    response.data = json.dumps(data)


return response

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM