6

我有一个为 Django 消费者提供 API 的 Flask 应用程序。我使用消费者中的请求库来访问 API。

我的问题是:当我测试我的 API 时,我得到 POST 数据request.form,当我从我的消费者(使用请求库)点击它时,我得到 POST 数据request.data

例如,

Flask 应用程序中的 API 端点:

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

在 Flask 应用程序中测试 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)
4

1 回答 1

7

啊,我发送的内容类型不正确。将其更改为 'application/x-www-form-urlencoded'request.form可以获得正确的东西。

request.data根据文档填充了 Flask/Werkzeug 不知道如何处理的东西。

于 2013-06-17T03:18:55.410 回答