Sono molto nuovo a Flask (& Flask-Restful).Python Flask-POST riposante che non accetta argomenti JSON
Il mio problema: json
argomenti per un POST
è impostato su NONE
(non funziona).
Sono in grado di accettare argomenti dallo form-data
, utilizzando il plug-in POSTMAN
per Chrome. Ma, quando passo a raw
(& feed a json
), non riesce a leggere il json & assegna uno NONE
a tutti i miei argomenti.
Ho letto alcuni post di stackoverflow correlati a questo: link1, link2, link3 ... nessuno di questi mi ha aiutato.
Sto usando python-2.6
, Flask-Restful-0.3.3
, Flask-0.10.1
, Chrome
, POSTMAN
su Oracle Linux 6.5.
codice Pythonapp.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)
prove della utilizzando POSTMAN
:
- Utilizzando
form-data
: funziona perfettamente! - Utilizzando
raw
->json
: causa il problema
Cose cercato # 1:
Aggiungi json
parametro per il mio metodo add_argument()
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": "h ello", "password": "mondo"}
Output
: { "p": "Nessuno", "u": "Nessuno"}
Cose provato # 2:
Change digitare per unicode
in add_argument()
metodo 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
: { "nome utente": "ciao", "password": "mondo"}
Output
: { "p": "Nessuno", "u": "Nessuno"}
PS: terrò aggiornare la mia domanda, ad ogni tentativo fallito. Per favore fatemi sapere se avete bisogno di ulteriori informazioni per rendere questa domanda più chiara.
Mi sembra che manchi una chiamata a 'parser.parse_args()'. Dovresti avere 'args = parser.parse_args()' prima di poter accedere a 'args' – junnytony
@junnytony - è un refuso dal mio lato, ho dimenticato di copiare quella linea. Modifica la domanda subito! – sudhishkr
Provare 'unicode' invece di' str' per i tipi di argomenti – sirfz