webentwicklung-frage-antwort-db.com.de

flask restful: Übergabe von Parametern an GET request

Ich möchte eine Ressource erstellen, die die GET-Anforderung auf folgende Weise unterstützt:

/bar?key1=val1&key2=val2

Ich habe diesen Code ausprobiert, aber er 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!

33
Rugnar

Flask kann Argumente durch Anfrage analysieren

from flask import request

Sie können die folgenden Zeilen im Block verwenden, für die GET-Parameter erforderlich sind. GET wird in der @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
22
Aditya

Bearbeiten: Dies ist nicht mehr die empfohlene Methode, um dies mit flask-restful zu tun! Das Objekt reqparse ist veraltet, siehe docs für empfohlene Alternative.


Verwenden Sie reqparse. Sie können ein weiteres Beispiel in der Flasche-Restful sehen docs .

Es führt eine Validierung der Parameter durch und erfordert kein 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)
33
Paul Rooney

Da reqparse veraltet ist, ist hier eine Lösung unter Verwendung der 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 finden Sie im Flask-RESTful-Beispiel im WebArgs-Repository.

27
severen