使用烧瓶请求处理表单数据

时间:2016-03-14 18:57:39

标签: python flask axios

我正在使用flask-restful作为api服务器并构建第一个PUT方法。使用从flask导入的请求,我可以使用以下cURL命令访问request.form数据而不会出现问题:

curl http://127.0.0.1:5000/api/v1/system/account -X PUT -d username=asdas -d email=asdasd@test.com

我的PUT方法会同时注销用户名和电子邮件:

def put(self):
    print 'SystemAccountPut'
    print request.form['username']
    print request.form['email']
    return

输出:

SystemAccountPut
asdas
asdasd@test.com

我有一个使用axios project进行api通话的应用。当axios尝试PUT形成数据时,request.form不再有效。以下是调用axios从Chrome Dev Console转换为cURL命令:

curl 'http://127.0.0.1:5000/api/v1/system/account' -X PUT -H 'Pragma: no-cache' -H 'Origin: http://127.0.0.1:5000' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: en-US,en;q=0.8' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36' -H 'Content-Type: application/json;charset=UTF-8' -H 'Accept: application/json, text/plain, */*' -H 'Cache-Control: no-cache' -H 'Referer: http://127.0.0.1:5000/settings' -H 'Connection: keep-alive' --data-binary '{"username":"asdas","email":"asdasd@test.com"}' --compressed

使用上述相同的方法,request.form['username']request.form['email']为空。 request.data但其中包含表单数据,request.get_json()也将以JSON格式输出表单数据。

我的问题是在这种情况下我应该使用什么来检索表单数据?第一个curl命令是干净的,request.form具有我需要的数据,但request.data为空。第二个cURL命令使request.form断开,但填充request.data。有关如何在两个cURL案例中检索表单数据的最佳实践吗?

1 个答案:

答案 0 :(得分:2)

在进一步了解传入形式和大卫的一些见解后,我想出了这个问题。第一个cURL示例具有以下内容类型:application/x-www-form-urlencoded。第二个cURL命令具有以下内容类型:application/json;charset=UTF-8。不出所料,第一个cURL命令将表单数据发送到request.form,第二个cURL命令被解释为数据,可以在request.datarequest.get_json()检索。根据我的需要,我想以任一方式获取表单数据,因此在我的put方法中,我有以下内容:

    data = request.get_json() or request.form
    print data['email']
    print data['username']

这为我提供了两个cURL示例中的电子邮件和密码。