我想通过以下方式创建一个支持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')谢谢!
发布于 2015-06-11 19:43:36
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发布于 2015-06-11 19:51:17
flask编辑: reqparse 不再是使用-restful!执行此操作的推荐方式,但下面还有另一个使用棉花糖的示例。
reqparse对象已弃用。请参阅本文中的docs或第二个示例以获取替代方案。
使用reqparse。您可以在flask-restful docs中看到另一个示例。
它对参数执行验证,不需要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)另一种方法是使用marshmallow。
可以使用Schema类来验证request.args (对于PUT/POST请求,您可以验证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)此示例要求这两个参数都存在。
发布于 2016-07-20 19:50:44
由于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, req, schema, *, error_status_code, error_headers):
abort(error_status_code, errors=err.messages)
if __name__ == '__main__':
app.run(debug=True)有关更多示例,请参阅WebArgs存储库中的Flask-RESTful example。
https://stackoverflow.com/questions/30779584
复制相似问题