restplus - rest api python 3 example
matraz tranquilo: pasar parĂ¡metros a solicitud GET (3)
Quiero crear un recurso que admita la solicitud GET de la siguiente manera:
/bar?key1=val1&key2=val2
Probé este código, pero no funciona.
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'')
¡Gracias!
Como reqparse
está en desuso, aquí hay una solución que utiliza la biblioteca 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)
Para obtener más ejemplos, eche un vistazo al ejemplo FTASK -REST en el repositorio de WebArgs.
Frasco puede analizar los argumentos a través de la solicitud
from flask import request
Puede usar las siguientes líneas en el bloque que requiere parámetros GET. GET se declara en la declaración @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
Edición: ¡Esta ya no es la manera recomendada de hacer esto con un matraz tranquilo! El objeto reqparse
está en desuso, consulte los docs para conocer la alternativa recomendada.
Utilice reqparse
. Puedes ver otro ejemplo en la docs del matraz.
Realiza la validación de los parámetros y no requiere 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)