Python Flask-Restful POST不接受JSON参数

发布于 2021-01-29 15:08:49

我对Flask(&Flask-Restful)很陌生。

我的问题:json将a的参数POST设置为NONE(不起作用)。

我可以form-data使用POSTMANchrome插件从中获取参数。但是,当我切换到raw(&feed a
json)时,它无法读取json并将a分配NONE给我的所有参数。

我已经阅读了一些与此相关的stackoverflow帖子:link1link2link3 …这些都不对我有帮助。

我使用python-2.6Flask- Restful-0.3.3Flask-0.10.1ChromePOSTMAN在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的事情

将类型更改为unicodein中的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: 每次尝试都会失败,我会不断更新我的问题。如果您需要更多信息以使这个问题更加清楚,请告诉我。

关注者
0
被浏览
80
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    根据Request.json和新的Request.get_json的文档,您应将POST请求上的模仿类型设置为application/json。这是flask自动将您的JSON数据解析为该Request.json属性的唯一方法(我相信)是Flask-
    Restful用来检索JSON数据所依赖的属性。

    注意:较新的get_json函数具有一个选项,可将POST数据解析为JSON,而与mimetype无关



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看