Flask-restful API не принимает json

#python #rest #api #flask-restful

#python #rest #API #flask-restful

Вопрос:

Я пытаюсь научиться создавать 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)
 

Ответ №1:

Ваш код должен работать — вы должны указать заголовок запроса Content-Type: application/json . Причина flask-restful в том, что reqparse модуль пытается проанализировать свои данные 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 вы можете установить заголовок, как показано на скриншоте ниже. введите описание изображения здесь