2015-06-11 34 views
17

Chcę utworzyć zasób, który obsługuje żądanie GET w następujący sposób:kolby spokojny: przekazywanie parametrów GET żądania

/bar?key1=val1&key2=val2 

Próbowałem ten kod, ale nie działa

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

Dzięki!

+0

Minęło trochę czasu, odkąd zadałeś pytanie, a wybrana odpowiedź korzysta z interfejsu API, który jest przestarzały. Czy mógłbyś zaktualizować zaakceptowaną odpowiedź? – Stereo

+0

w rzeczy samej, istnieje lepsza biblioteka o nazwie flask_restful, w której można definiować zasoby ("przechwytuje" do bazy danych, które definiują operacje CRUD), dodawać je do API i wiązać ten interfejs API do Flask za pomocą Blueprints. W nim znajdziesz klasę RequestParser do analizowania argumentów przekazywanych jako treść dokumentu. – OzzyTheGiant

Odpowiedz

12

Kolba można analizować argumenty poprzez żądanie

from flask import request 

można wykorzystywać następujące wiersze w bloku, który wymaga parametrów GET. GET jest deklarowany w deklaracji @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: To już nie jest zalecany sposób to zrobić z kolby-spokojny! Obiekt reqparse jest przestarzały, patrz zalecana alternatywa: docs.


Użyj reqparse. Możesz zobaczyć inny przykład w butelce-spokojny docs.

Wykonuje sprawdzanie poprawności parametrów i nie wymaga 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

Od reqparse jest przestarzała tutaj jest rozwiązanie z wykorzystaniem biblioteki 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) 

Więcej przykładów spojrzeć na Flask-RESTful example w repozytorium WebArgs.

+0

Ładne rozwiązanie, bardzo mi pomogło! – Stereo