使用烧瓶请求处理表单数据
Handling form data with flask request
我正在使用 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 情况下检索表单数据,是否有最佳实践?
在进一步了解传入表单和 davidism 的一些见解后,我发现了这个问题。第一个 cURL 示例具有以下内容类型:application/x-www-form-urlencoded
。第二个 cURL 命令具有以下内容类型:application/json;charset=UTF-8
。不出所料,第一个 cURL 命令将表单数据发送到 request.form
,第二个 cURL 命令被解释为数据并可以在 request.data
或 request.get_json()
处检索。为了我的需要,我想以任何一种方式获取表单数据,所以在我的 put
方法中,我有以下内容:
data = request.get_json() or request.form
print data['email']
print data['username']
这为我提供了两个 cURL 示例中的电子邮件和密码。
我正在使用 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 '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 情况下检索表单数据,是否有最佳实践?
在进一步了解传入表单和 davidism 的一些见解后,我发现了这个问题。第一个 cURL 示例具有以下内容类型:application/x-www-form-urlencoded
。第二个 cURL 命令具有以下内容类型:application/json;charset=UTF-8
。不出所料,第一个 cURL 命令将表单数据发送到 request.form
,第二个 cURL 命令被解释为数据并可以在 request.data
或 request.get_json()
处检索。为了我的需要,我想以任何一种方式获取表单数据,所以在我的 put
方法中,我有以下内容:
data = request.get_json() or request.form
print data['email']
print data['username']
这为我提供了两个 cURL 示例中的电子邮件和密码。