我有一个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)
解决方法:
啊,我发送的内容类型不正确.将其更改为’application / x-www-form-urlencoded’会使request.form获得正确的内容.
request.data填充了东西Flask / Werkzeug不知道如何处理according to the docs.