Python Flask-Restful POST 不采用 JSON 参数

标签 python json rest flask flask-restful

我对 Flask(和 Flask-Restful)非常陌生。

我的问题:POSTjson 参数设置为 NONE(不起作用)。

我可以使用 POSTMAN 插件从 form-data 获取参数。但是,当我切换到 raw(并提供一个 json)时,它无法读取 json 并为我的所有参数分配一个 NONE

我已经阅读了一些与此相关的 stackoverflow 帖子:link1 , link2 , link3 ...这些都没有帮助我。

我正在使用 python-2.6Flask-Restful-0.3.3Flask-0.10.1Chrome, 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/

相关文章:

python - 使用 Dask 导入大型 CSV 文件

python - 在 apply 函数中使用 shift() 函数来比较 Pandas Dataframe 中的行

javascript - 如何将此 Javascript 变量转换为有效的 JSON?

php - 将数组添加到另一个数组(不是 array_push 或 array_merge)

java - 指向这些方法的 uri 会是什么样子

ios - 从 Swift 函数中的异步调用返回数据

python - 如果字符串不在一个或多个列表中则引发错误

python - 如何从 django (python) 中的日期中删除 '0' ?

javascript - Selenium IDE 给出 SyntaxError : JSON. parse:字符串文字中的错误控制字符

rest - 它是 Hbase REST API `get version/cluster` 中的错误吗?