flask restful: passing parameters to GET request
Flask can parse arguments through request
from flask import request
You can use following lines in the block that requires GET parameters. GET is declared in @app.route()
declaration.
args = request.args
print (args) # For debugging
no1 = args['key1']
no2 = args['key2']
return jsonify(dict(data=[no1, no2])) # or whatever is required
Edit: reqparse
is no longer the recommended way to do this with flask-restful!, but there is another example using marshmallow below.
The reqparse
object is deprecated. See the docs or the second example in this post for alternatives.
Use reqparse
. You can see another example in the flask-restful docs.
It performs validation on the parameters and does not require 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)
Another way is to use marshmallow.
You can use a Schema
class,to validate request.args
(for a PUT/POST request you might validate request.form
)
from flask import Flask, request, abort
from flask_restful import Resource, Api
from marshmallow import Schema, fields
class BarQuerySchema(Schema):
key1 = fields.Str(required=True)
key2 = fields.Str(required=True)
app = Flask(__name__)
api = Api(app)
schema = BarQuerySchema()
class BarAPI(Resource):
def get(self):
errors = schema.validate(request.args)
if errors:
abort(400, str(errors))
return 'ok'
api.add_resource(BarAPI, '/bar', endpoint='bar')
# omit of you intend to use `flask run` command
if __name__ == '__main__':
app.run(debug=True)
This example requires that both parameters be present.