如何在after_request函数中更改flask中的响应?

 手机用户2502896567 发布于 2023-01-19 11:34

我是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

我得到的错误是"TypeError:list indices必须是整数,而不是str".如何在请求完成后更改响应字典并添加密钥?

1 个回答
  • response是一个WSGI对象,这意味着响应的主体必须是可迭代的.对于jsonify()仅包含一个字符串的列表的响应.

    但是,您应该使用此处的response.get_data()方法来检索响应主体,因为这样可以为您提供可迭代的响应.

    以下应该有效:

    d = json.loads(response.get_data())
    d['altered'] = 'this has been altered...GOOD!'
    response.set_data(json.dumps(d))
    

    jsonify()这里不要再使用了; 返回一个全新的响应对象; 你想要的就是这里的JSON响应体.

    使用,response.set_data()因为它还会调整Content-Length标题以反映更改的响应大小.

    2023-01-19 11:36 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有