flask restful:将参数传递给GET请求

Rug*_*nar 36 python rest flask flask-restful

我想以下列方式创建支持GET请求的资源:

/bar?key1=val1&key2=val2
Run Code Online (Sandbox Code Playgroud)

我尝试了这段代码,但它没有用

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')
Run Code Online (Sandbox Code Playgroud)

谢谢!

Pau*_*ney 35

编辑:这不再是推荐使用烧瓶的方法!reqparse对象已弃用,请参阅文档以获取推荐的替代方案.


使用reqparse.您可以在flask-restful 文档中看到另一个示例.

它对参数执行验证,但不需要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)
Run Code Online (Sandbox Code Playgroud)


sev*_*ren 28

由于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)
Run Code Online (Sandbox Code Playgroud)

有关更多示例,请查看WebArgs存储库中的Flask-RESTful示例.


Adi*_*tya 23

Flask可以通过请求解析参数

from flask import request
Run Code Online (Sandbox Code Playgroud)

您可以在需要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
Run Code Online (Sandbox Code Playgroud)

  • `request.args.get('key1', DEFAULT_COUNT, type=int)` 是一种更好的处理方式,以防查询未通过。 (3认同)
  • 虽然 Flask 请求对象可以轻松检索 GET 参数,但它不执行任何数据验证。更好的方法是使用对象数据映射器,如“marshmallow”或“webargs”(由 marshmallow 的同一作者创建)进行数据验证和过滤,以确保 AppSec (2认同)