Flask/Werkzeug请求对象表单参数

Chr*_*nel 6 python werkzeug flask python-requests

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

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

例如,

Flask app中的API端点:

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

在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)
        ...
Run Code Online (Sandbox Code Playgroud)

这填充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)
Run Code Online (Sandbox Code Playgroud)

这填充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)
Run Code Online (Sandbox Code Playgroud)

Chr*_*nel 7

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

request.data填充的东西Flask/Werkzeug 根据文档不知道该怎么做.