Flask / Werkzeug请求对象表单参数

时间:2013-06-17 03:03:31

标签: python flask python-requests werkzeug

我有一个Flask应用程序,为Django消费者提供API。我使用我的消费者中的requests library来获取API。

我的问题是这样的:当我测试我的API时,我在request.form中获取POST数据,当我从我的消费者那里(使用请求库)命中它时,我在request.data中获得POST数据。

如,

Flask app中的API端点:

@mod.route('/customers/', methods=['POST'])
def create_prospect():
    customer = Customer()
    prospect = customer.create_prospect(request.form)
    return jsonify(prospect.serialize()), 201

在Flask app中测试API端点:

def test_creating_prospect(self):
    with self.app.app_context():
        data = {'name': 'Test company and co'}
        response = self.client.post(self.url, data=data)
        ...

这会填充我的端点中的request.form,这可以正常工作。

使用请求从我的Django应用程序中使用API​​:

...
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
data = {'name': 'Test company and co'}
response = requests.post(url, data=data, headers=headers)

这会填充我的端点中的request.data,但由于我正在检查request.form信息,因此会失败。

我在写这个问题时已经有了一个想法;也许json标题正在填充request.data而不是request.form

任何意见都赞赏。

编辑 - 我尝试将标题添加到我的测试中,运行正常:

    headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
    response = self.client.post(self.url, data=data, headers=headers)

1 个答案:

答案 0 :(得分:6)

啊,我发送的内容类型不正确。将其更改为'application / x-www-form-urlencoded'会使request.form得到正确的内容。

request.data填充了Flask / Werkzeug不知道如何处理according to the docs的内容。