Python-Flask-Restful-POST nicht unter JSON-Argumente
Ich bin ganz neu Kolben (& Kolben-Restful).
Mein problem : json
Argumente für eine POST
eingerichtet wird, um NONE
(funktioniert nicht).
Ich bin in der Lage, Argumente aus der form-data
mit POSTMAN
plugin für chrome. Aber, wenn ich wechseln raw
(& feed ein json
), es nicht zu Lesen der json & weist eine NONE
alle meine Argumente.
Ich habe einige Verwandte stackoverflow-posts zu diesem Zusammenhang : link1, link2, link3 ... keines von diesen hat mir geholfen.
Ich bin mit python-2.6
, Flask-Restful-0.3.3
, Flask-0.10.1
, Chrome
, POSTMAN
auf Oracle Linux 6.5.
Python-code app.py
:
from flask import Flask, jsonify
from flask_restful import reqparse, abort, Api, Resource
app = Flask(__name__)
api = Api(app)
parser = reqparse.RequestParser()
parser.add_argument('username', type=str)
parser.add_argument('password', type=str)
class HelloWorld(Resource):
def post(self):
args = parser.parse_args()
un = str(args['username'])
pw = str(args['password'])
return jsonify(u=un, p=pw)
api.add_resource(HelloWorld, '/testing')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5444 ,debug=True)
Testen dieser mit POSTMAN
:
- Mit
form-data
: funktioniert perfekt ! - Mit
raw
->json
: dieses Problem verursacht
Sachen ausprobiert #1 :
Hinzufügen json
parameter, um meine add_argument()
Methode in app.py
parser = reqparse.RequestParser()
parser.add_argument('username', type=str, location='json') # added json
parser.add_argument('password', type=str, location='json') # added json
Input
: { "username": "Hallo", "password": "Welt" }
Output
: { "p": "Keine", "u": "None" }
Sachen ausprobiert #2 :
Typ ändern, um unicode
im add_argument()
Methode in app.py
parser = reqparse.RequestParser()
parser.add_argument('username', type=unicode, location='json') # change type to unicode
parser.add_argument('password', type=unicode, location='json') # change type to unicode
Input
: { "username": "Hallo", "password": "Welt" }
Output
: { "p": "Keine", "u": "None" }
PS :
Ich werde halten Aktualisierung meiner Frage, mit jedem gescheiterten Versuch.
Bitte lassen Sie mich wissen, wenn Sie brauchen mehr info, um diese Frage klarer.
- Sieht für mich wie Sie fehlt ein Aufruf
parser.parse_args()
. Sollten Sieargs = parser.parse_args()
bevor Sie Zugriff auf dieargs
- seine ein Tippfehler von meiner Seite, ich habe vergessen, zu kopieren, in der Zeile. Bearbeiten Sie die Frage sofort!
- Versuchen
unicode
stattstr
für die Argumente Typen unicode
hat das gleiche Problem, behältNone
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gemäß der Dokumentation für Anfrage.json und die neue Anfrage.get_json, sollten Sie den MIME-Typ auf Ihrem POST-Anforderung festgelegt
application/json
. Dies ist der einzige Weg, Kolben wird automatisch analysieren Ihre JSON-Daten in derRequest.json
Eigenschaft, die (glaube ich) ist, was Kolben-Restful hängt zum abrufen von JSON-Daten.HINWEIS: Die neueren
get_json
Funktion hat eine option, um Kraft für das Parsen von POST-Daten als JSON-unabhängig von der mimetypejunnytony Antwort gab mir einen Tip und ich ging voran mit diesem Ansatz.
get_json
scheint getan haben, der trick.Ich lief in ein ähnliches Problem und hier ist eine Lösung, die funktioniert für mich. angenommen, Ihre Anwendung sieht wie folgt aus:
Nun, Sie können leicht erstellen Sie einige JSON-Daten:
und rufen Sie die Anwendung:
Dieser Absturz mit der Fehlermeldung (ich verkürzt die traceback):
der Grund dafür ist, dass in der Kopfzeile nicht angegeben. Wenn wir hinzufügen, die
dann rufen Sie
Sieht die Ausgabe wie erwartet:
Kann die Funktion auch noch weiter vereinfacht zu:
als oben gezeigt.
Nach zwingen die Anfrage zu Parsen, json, er arbeitete mit mir.
Hier ist der code: