2016-10-15 3 views
1

Я пытаюсь научиться делать apis. Я полностью копировал все из книги, но я не могу отправить сообщение в api. Я попробовал опубликовать {'name':'holy'} как необработанные данные в postman (инструмент для публикации json), и я получаю сообщение об ошибке vladation help «No Name provided»: но когда я попробую name=holy, он отлично работает. Я думал, что это было предположить, чтобы не работать так, как я могу получить его на работу с {'name':'holy'}Flask-restful API не принимает json

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) 

ответ

2

Ваш код должен работать - вы должны указать заголовок запроса 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" 
} 

В Почтальон, вы можете установить заголовок, как показано на скриншоте ниже. enter image description here

+0

Большое спасибо :-) –