【问题标题】:Flask - Access request object from method in classFlask - 从类中的方法访问请求对象
【发布时间】:2018-03-28 07:46:59
【问题描述】:

我正在尝试从用于创建 Flask 应用程序的类中的方法内部访问 request.form 字段,但我每次都得到空请求

from flask import Flask, request
class MyAPIClass(object):

    def __init__(self, address="0.0.0.0", port=5000):
        self.address = address
        self.port = port
        self.app = Flask(__name__)
        self.logger = self.app.logger
        self.app.add_url_rule('/create/<id>', 'create', self.create, methods=['POST'])

    def create(self, od):
       root = request.form.get('root')
       home = request.form.get('home')
       size = int(request.form.get('size', 0))
       print('CREATE {} -> {} -> {} -> {}'.format(id, root, home, size))

    def start(self):
       self.app.run(debug=True, host=self.address, port=self.port)

我尝试使用 Flask.request_started 将请求对象保存在我班级的字段中,但似乎不起作用。

这就是我创建和启动课程的方式

from MyLib import MyAPIClass
api = MyAPIClass()
api.start()

然后使用邮递员将 POST 发送到 url

curl --request POST \
  --url http://127.0.0.1:5000/create/123 \
  --header 'home: r/h' \
  --header 'root: r' \
  --header 'size: 100'

有什么建议吗?

【问题讨论】:

  • 你能包括使用例子吗?你是如何调用这个类的,你是如何将表单传递给它的?
  • 将表单数据作为方法参数传递呢?
  • 添加示例,我不想在uri中添加参数,因为其中一些是URI

标签: python python-3.x rest flask


【解决方案1】:

HTTP Header 不同于表单数据(实际上是格式化为application/x-www-form-urlencoded 的 POST 数据)。

使用您发布的 curl 命令,您可以添加 HTTP 标头而不是表单数据。像这样使用它:

curl --request POST \
  --url http://127.0.0.1:5000/create/123 \
  --form 'home: r/h' \
  --form 'root: r' \
  --form 'size: 100'

【讨论】:

  • 真丢脸,我用邮递员把参数放错了地方。非常感谢!
猜你喜欢
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 2017-05-28
相关资源
最近更新 更多