2015-06-11 15 views
17

Voglio creare una risorsa che supporta la richiesta GET in modo seguente:boccetta riposante: il passaggio di parametri per ottenere richiesta

/bar?key1=val1&key2=val2 

ho provato questo codice, ma non funziona

app = Flask(__name__) 
api = Api(app) 

class BarAPI(Resource): 
    def get(key1, key2): 
     return jsonify(dict(data=[key1, key2])) 

api.add_resource(BarAPI, '/bar', endpoint='bar') 

Grazie!

+0

è passato un po 'di tempo da quando hai fatto la tua domanda e la risposta che hai selezionato utilizza un'API deprecata. Potresti aggiornare la risposta accettata? – Stereo

+0

infatti, esiste una libreria migliore chiamata flask_restful in cui è possibile definire le risorse ("hook" nel database che definiscono le operazioni CRUD), aggiungerle a un'API e associare l'API a Flask utilizzando i Blueprints. In esso troverai la classe RequestParser per l'analisi degli argomenti passati come corpo del documento. – OzzyTheGiant

risposta

12

Flask in grado di analizzare gli argomenti attraverso richiesta

from flask import request 

È possibile utilizzare righe seguenti nel blocco che richiede parametri GET. GET è dichiarato nella dichiarazione @app.route().

args = request.args 
print (args) # For debugging 
no1 = args['key1'] 
no2 = args['key2'] 
return jsonify(dict(data=[no1, no2])) # or whatever is required 
25

Edit: Questo non è più il modo consigliato di fare questo con la boccetta-ristoratore! L'oggetto reqparse è obsoleto, vedere docs per l'alternativa consigliata.


Utilizzare reqparse. È possibile vedere un altro esempio nel contenitore restful docs.

Effettua la convalida sui parametri e non richiede jsonify.

from flask import Flask 
from flask_restful import Resource, Api, reqparse 

app = Flask(__name__) 
api = Api(app) 

class BarAPI(Resource): 
    def get(self): 

     parser = reqparse.RequestParser() 
     parser.add_argument('key1', type=str) 
     parser.add_argument('key2', type=str) 

     return parser.parse_args() 

api.add_resource(BarAPI, '/bar', endpoint='bar') 

if __name__ == '__main__': 
    app.run(debug=True) 
15

Dal reqparse è deprecato Ecco una soluzione che utilizza la libreria WebArgs:

from flask import Flask 
from flask_restful import Api, Resource, abort 
from webargs import fields, validate 
from webargs.flaskparser import use_kwargs, parser 

app = Flask(__name__) 
api = Api(app) 

class Foo(Resource): 
    args = { 
     'bar': fields.Str(
      required=True, 
      validate=validate.OneOf(['baz', 'qux']), 
     ), 
    } 

    @use_kwargs(args) 
    def get(self, bar): 
     return {'bar': bar} 

api.add_resource(Foo, '/foo', endpoint='foo') 

# This error handler is necessary for usage with Flask-RESTful. 
@parser.error_handler 
def handle_request_parsing_error(err): 
    abort(422, errors=err.messages) 

if __name__ == '__main__': 
    app.run(debug=True) 

Per ulteriori esempi un'occhiata al Flask-RESTful example nel repository WebArgs.

+0

Bella soluzione, mi ha aiutato molto! – Stereo

Problemi correlati