我对烧瓶很陌生(烧瓶很安静)。
我的问题是:一个POST
的json
参数被设置为NONE
(不工作)。
我可以使用chrome的form-data
插件从POSTMAN
获取参数。但是,当我切换到raw
(&;feed ajson
)时,它无法读取json为我的所有参数分配的NONE
。
我读过一些与此相关的stackoverflow帖子:link1,link2,link3。。。这些都帮不了我。
我正在Oracle Linux 6.5上使用python-2.6
、Flask-Restful-0.3.3
、Flask-0.10.1
、Chrome
、POSTMAN
。
Python代码app.py
:
from flask import Flask, jsonify
from flask_restful import reqparse, abort, Api, Resource
app = Flask(__name__)
api = Api(app)
parser = reqparse.RequestParser()
parser.add_argument('username', type=str)
parser.add_argument('password', type=str)
class HelloWorld(Resource):
def post(self):
args = parser.parse_args()
un = str(args['username'])
pw = str(args['password'])
return jsonify(u=un, p=pw)
api.add_resource(HelloWorld, '/testing')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5444 ,debug=True)
使用POSTMAN
测试此功能:
form-data
:非常有效!raw
->;json
:会导致此问题尝试过的事情:
将json
参数添加到app.py
中的add_argument()
方法
parser = reqparse.RequestParser()
parser.add_argument('username', type=str, location='json') # added json
parser.add_argument('password', type=str, location='json') # added json
Input
:{“用户名”:“你好”,“密码”:“世界”}
Output
:{“p”:“None”,“u”:“None”}
尝试过的事情:
在app.py
中的add_argument()
方法中将类型更改为unicode
parser = reqparse.RequestParser()
parser.add_argument('username', type=unicode, location='json') # change type to unicode
parser.add_argument('password', type=unicode, location='json') # change type to unicode
Input
:{“用户名”:“你好”,“密码”:“世界”}
Output
:{“p”:“None”,“u”:“None”}
附言: 我会不断更新我的问题,每一次失败的尝试。 如果你需要更多的信息来澄清这个问题,请告诉我。
朱尼托尼的回答给了我一个暗示,我继续这样做。
get_json
似乎成功了。我遇到了一个类似的问题,这里有一个对我有效的解决方案。假设您的应用程序如下所示:
现在,您可以轻松创建一些JSON数据:
并调用应用程序:
这将因错误而崩溃(我缩短了回溯时间):
原因是没有指定头。如果我们加上
然后打电话
输出看起来与预期一致:
该功能还可以进一步简化为:
作为shown above。
根据Request.json和新的Request.get_json的文档,您应该将POST请求上的mimetype设置为
application/json
。这是flask自动将JSON数据解析为Request.json
属性的唯一方法,我相信这正是flask Restful检索JSON数据所依赖的。注意:新的
get_json
函数有一个选项,可以强制将POST数据解析为JSON,而不考虑mimetype相关问题 更多 >
编程相关推荐