我想以下列方式创建支持GET请求的资源:
/bar?key1=val1&key2=val2
我尝试了这段代码,但它没有用
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')
谢谢!
答案 0 :(得分:33)
编辑:这不再是使用flask-restful执行此操作的推荐方法! {@ 1}}对象已弃用,有关推荐的替代方法,请参阅docs。
使用reqparse
。你可以在burn-restful docs中看到另一个例子。
它对参数执行验证,不需要reqparse
。
jsonify
答案 1 :(得分:25)
由于不推荐使用reqparse
,因此使用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)
有关更多示例,请查看WebArgs存储库中的Flask-RESTful example。
答案 2 :(得分:22)
Flask可以通过请求解析参数
from flask import request
您可以在需要GET参数的块中使用以下行。 GET在@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