我对 Flask(和 Flask-Restful)非常陌生。
我的问题:POST
的 json
参数设置为 NONE
(不起作用)。
我可以使用 POSTMAN
插件从 form-data
获取参数。但是,当我切换到 raw
(并提供一个 json
)时,它无法读取 json 并为我的所有参数分配一个 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:
在 app.py
json
参数添加到我的 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
输入
: { "username": "hello", "password": "world"}
输出
: { "p": "None", "u": "None"}
尝试#2:
在 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
输入
: { "username": "hello", "password": "world"}
输出
: { "p": "None", "u": "None"}
PS: 我会不断更新我的问题,每次失败的尝试。 如果您需要更多信息以使这个问题更清楚,请告诉我。
最佳答案
junnytony 的回答给了我一个提示,我继续采用这种方法。 get_json
似乎已经成功了。
from flask import Flask, jsonify, request
from flask_restful import reqparse, abort, Api, Resource
app = Flask(__name__)
api = Api(app)
#parser = reqparse.RequestParser()
#parser.add_argument('username', type=unicode, location='json')
#parser.add_argument('password', type=unicode, location='json')
class HelloWorld(Resource):
def post(self):
json_data = request.get_json(force=True)
un = json_data['username']
pw = json_data['password']
#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)
关于Python Flask-Restful POST 不采用 JSON 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30491841/