2016-10-15 5 views
1

Ich versuche zu lernen, wie man Apis zu tun. Ich habe alles genau aus dem Buch kopiert, aber ich kann nicht auf die API schreiben. Ich versuchte {'name':'holy'} als rohe Daten in postman (ein json Beitragstool) zu api und ich bekomme die vladation Hilfe Nachricht Fehler "Kein Name zur Verfügung gestellt": aber wenn ich versuche name=holy es funktioniert gut. Ich dachte, es war nicht so, dass die Arbeit zu annehmen, wie ich es tun bekommen mit {'name':'holy'} sollteFlask-restful API nicht akzeptiert 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) 

Antwort

2

Ihr Code arbeiten zu arbeiten - Sie können den Request-Header Content-Type: application/json angeben müssen. Der Grund dafür ist, dass flask-restfulreqparse Modul versucht, its data from flask.request.json zu analysieren, die nur festgelegt wird, wenn Content-Type: application/json festgelegt ist.

Wenn Sie Zugriff auf curl (oder wget), können Sie die folgenden Test durchführen:

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

In Postman, können Sie einen Header gesetzt, wie im Screenshot unten gezeigt. enter image description here

+0

Vielen Dank :-) –

Verwandte Themen