【发布时间】:2015-08-10 02:13:17
【问题描述】:
我对 Flask(和 Flask-Restful)非常陌生。
我的问题:POST 的 json 参数设置为 NONE(不起作用)。
我可以使用 POSTMAN chrome 插件从 form-data 获取参数。但是,当我切换到raw(并提供json)时,它无法读取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: 导致此问题
尝试#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
Input : { "username": "hello", "password": "world" }
Output:{“p”:“无”,“u”:“无”}
尝试#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
Input : { "username": "hello", "password": "world" }
Output:{“p”:“无”,“u”:“无”}
PS: 我会不断更新我的问题,每次失败的尝试。 如果您需要更多信息以使这个问题更清楚,请告诉我。
【问题讨论】:
-
在我看来,您好像错过了对
parser.parse_args()的呼叫。您应该先拥有args = parser.parse_args(),然后才能访问args -
@junnytony - 这是我这边的错字,我忘了复制那行。立即编辑问题!
-
对参数类型尝试
unicode而不是str -
@Sir_FZ
unicode有同样的问题,保留None
标签: python json rest flask flask-restful