2015-06-11 8 views
17

Ich mag eine Ressource erstellen, die in folgenden Weise GET Anfrage unterstützt:Kolben geruhsame: Übergabe von Parametern GET Anfrage

/bar?key1=val1&key2=val2 

ich diesen Code versucht, aber es funktioniert nicht

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') 

Vielen Dank!

+0

eine Weile ist vergangen, seit Sie Ihre Frage gestellt haben und die Antwort, die Sie ausgewählt haben, verwendet eine API, die veraltet ist. Könnten Sie die angenommene Antwort aktualisieren? – Stereo

+0

In der Tat gibt es eine bessere Bibliothek namens flask_restful, in der Sie Ressourcen definieren können ('hooks' zu Ihrer Datenbank, die CRUD-Operationen definieren), sie zu einer API hinzufügen und diese API mithilfe von Blueprints an Flask binden. Darin finden Sie die RequestParser-Klasse zum Parsen von Argumenten, die als Dokumenttext übergeben werden. – OzzyTheGiant

Antwort

12

Flask können Argumente durch Anfrage analysieren

from flask import request 

Sie können folgende Zeilen in dem Block verwenden, die Parameter erfordert GET. GET wird in @app.route() Deklaration deklariert.

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: Das ist nicht mehr der empfohlene Weg, dies mit flaschen geruhsamen zu tun! Das reqparse Objekt ist veraltet, siehe docs für empfohlene Alternative.


Verwenden Sie reqparse. Sie können ein anderes Beispiel in der Kolben-erholsamen docs sehen.

Er führt eine Validierung der Parameter durch und benötigt keine 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

Da reqparse veraltet ist hier eine Lösung, die die WebArgs Bibliothek:

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) 

Weitere Beispiele zu sehen, die Flask-RESTful example im WebArgs Repository.

+0

Schöne Lösung, es hat mir sehr geholfen! – Stereo