[英]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.