Python Flask-Restful POST不接受JSON参数
我对Flask(&Flask-Restful)很陌生。
我的问题:json
将a的参数POST
设置为NONE
(不起作用)。
我可以form-data
使用POSTMAN
chrome插件从中获取参数。但是,当我切换到raw
(&feed a
json
)时,它无法读取json并将a分配NONE
给我的所有参数。
我已经阅读了一些与此相关的stackoverflow帖子:link1,link2,link3 …这些都不对我有帮助。
我使用python-2.6
,Flask-
Restful-0.3.3
,Flask-0.10.1
,Chrome
,POSTMAN
在Oracle的Linux 6.5。
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
: 导致此问题
尝试过的事情#1 :
json
在我的add_argument()
方法中添加参数app.py
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”:“无”,“ u”:“无”}
尝试了#2的事情 :
将类型更改为unicode
in中的add_argument()
方法app.py
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”:“无”,“ u”:“无”}
PS: 每次尝试都会失败,我会不断更新我的问题。如果您需要更多信息以使这个问题更加清楚,请告诉我。
-
根据Request.json和新的Request.get_json的文档,您应将POST请求上的模仿类型设置为
application/json
。这是flask自动将您的JSON数据解析为该Request.json
属性的唯一方法(我相信)是Flask-
Restful用来检索JSON数据所依赖的属性。注意:较新的
get_json
函数具有一个选项,可将POST数据解析为JSON,而与mimetype无关