如何在Flask请求中设置属性?

问题描述 投票:0回答:1

注意:这不是How to set attributes on a request in Flask的重复项>

案例:完全了解您将要做的事情不是正确的方法,但这是12月29日,可以进行实际修复的人员将在一周内无法使用。 最近更改之后,页面(或页面是否超过一个?)不再发布JSON,而是发布FORM

。通过将request.form转换为JSON,然后将其拍打为request.json,您也许可以解决一周的问题-如果它只允许您这样做。

我尝试过的是:

    if not request.json and request.form:
        setattr(request, "json", json.dumps(request.form))

我收到投诉:

  ...
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "./routes.py", line 134, in api_file_id
    setattr(request, "json", json.dumps(request.form))
  File "/usr/lib/python3/dist-packages/werkzeug/local.py", line 364, in <lambda>
    __setattr__ = lambda x, n, v: setattr(x._get_current_object(), n, v)
AttributeError: can't set attribute

能够执行此操作将使此泡泡糖修复程序小而容易找到(在路由功能中)。替代方案变得混乱...

我缺乏必要的知识来理解为什么会收到此错误,也没有给我太多帮助-为什么无法设置属性。

我是在做错什么,还是由于某种原因这不可能吗?

[注意:这与在Flask Case中如何在请求上设置属性不是重复的:完全了解您将要做的事情不是正确的方法,但这是12月29日,可以进行此操作的人。 。

flask request attributes add
1个回答
1
投票

基础BaseRequest对象是不可变的,因此您无法修改BaseRequest。您可能需要创建一个新变量来保存json,这意味着您将需要更新其他代码来引用您的新变量,而不是request,例如:

© www.soinside.com 2019 - 2024. All rights reserved.