Flask-restful API不接受json

时间:2016-10-15 05:36:00

标签: python rest api flask-restful

我正在努力学习如何做api。我完全复制了书中的所有内容,但我无法发布到api。我尝试将{'name':'holy'}作为postman(json发布工具)中的原始数据发布到api,我收到了vladation帮助消息错误“No Name provided”:但是当我尝试name=holy时,它可以正常工作精细。我认为不应该像那样工作,我如何让它与{'name':'holy'}

一起工作
from flask import Flask, request,render_template, jsonify
from flask_restful import Resource, Api,marshal_with, fields, reqparse

app = Flask(__name__)
api = Api(app)


class UserApi(Resource):
    def __init__(self):
        self.reqparse = reqparse.RequestParser()
        self.reqparse.add_argument(
            'name',
            required=True,
            help='No name provided',
            location=['form', 'json']
        )

    def get(self):
        return jsonify ({"first_name":"Holy","last_name": "Johnson"})

    def post(self):
        args = self.reqparse.parse_args()
        return jsonify ({"first_name":"Holy","last_name": "Johnson"})



api.add_resource(UserApi, '/users')

if __name__ == '__main__':
    app.run(debug=True)

1 个答案:

答案 0 :(得分:2)

您的代码应该有效 - 您必须指定请求标头Content-Type: application/json。原因是因为flask-restful reqparse模块尝试解析its data from flask.request.json,只有在Content-Type: application/json设置时才会设置。

如果您可以访问curl(或wget),则可以执行以下操作进行测试:

$shell> curl -X POST -H "Content-Type: application/json" -d '{"name": "holly"}' http://localhost:5000/users
{
  "first_name": "Holy",
  "last_name": "Johnson"
}

在Postman中,您可以设置标题,如下面的屏幕截图所示。 enter image description here