当前位置: 首页 > 面试题库 >

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

元彦君
2023-03-14
问题内容

我是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:列表索引必须是整数,而不是str”。请求完成后,如何更改响应字典并添加密钥?


问题答案:

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标题以反映更改后的响应大小。



 类似资料:
  • 问题内容: 我有一个小项目,必须响应一些文件。我知道使用会是一个更好的决定,但是文件很小。 我程序的一部分: 该行返回的文件名类似,没有任何格式或类似形式。已下载的文件名始终相同,并不取决于文件的真实名称。文件的真实名称是。如何返回带有正确文件名的文件? 问题答案: 你需要为浏览器设置HTTP标头以使用正确的文件名。 你可以通过设置参数来设置此标头。然后从传入的文件对象中获取文件名。使用参数显式设

  • 我的功能有问题,它使用作为进行搜索,但数据库中没有 我有一个错误: Illumb\Database\QueryException(42S22)SQLSTATE[42S22]:未找到列:“where子句”中的1054未知列“courses.id”(SQL:select*fromwhereid=cmpe102 limit 1)

  • 属性是可配置的,并且可以重写,但是如果我尝试

  • 问题内容: 这是我的代码: 但是,当我从浏览器向服务器发出请求时,出现此错误: 我也尝试过这种方法,在请求之后设置响应头: 没有骰子。我犯了同样的错误。有没有一种方法可以只在route函数中设置响应头?这样的事情将是理想的: 但我还是找不到这样做。请帮忙。 编辑 如果我使用POST请求卷曲URL,如下所示: 我得到这个回应: 有任何想法吗? 问题答案: 你可以很容易地做到这一点: 查看和 但是有些

  • 我有这个变量: 通过单击按钮,我执行此功能: 变量不会改变,我的输出是: 但是如果我第二次按下按钮,我会得到输出: 为什么值第一次不改变?

  • 我们正在开发几个部署到Azure Function Apps的Quarkus(在撰写本文时为2.5.4)应用程序。 我们注意到,我们所有的日志,无论代码的严重性如何,都在应用洞察中显示为信息。 我们已将 jboss 日志管理器添加到依赖项中: 当我检查日志时,它显示为这样。 2022-02-24T07:58:14.325[Information] 2022-02-24T07:58:14.308[I