【问题标题】:Flask-restful API not accepting jsonFlask-restful API 不接受 json
【发布时间】:2017-02-24 14:34:26
【问题描述】:

我正在尝试学习如何做 api。我完全复制了书中的所有内容,但无法发布到 api。我尝试将{'name':'holy'} 作为postman(一个json 发布工具)中的原始数据发布到api,我收到vladation 帮助消息错误“未提供名称”:但是当我尝试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)

【问题讨论】:

    标签: python rest api flask-restful


    【解决方案1】:

    您的代码应该可以工作 - 您必须指定请求标头 Content-Type: application/json。原因是因为flask-restfulreqparse模块试图解析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 中,您可以设置标题,如下面的屏幕截图所示。

    【讨论】:

      猜你喜欢
      • 2019-03-08
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 2015-12-22
      • 2018-06-14
      • 2013-11-07
      • 1970-01-01
      • 2013-10-25
      相关资源
      最近更新 更多