在烧瓶静止状态下获取带有和不带有参数的

Joh*_*ood 5 flask-restful

以下内容使我印象深刻,但确实有效。有没有办法让烧瓶轻松地使用相同的资源类来处理两种标准的get方法(即获得所有东西并获得一件物品)?

谢谢。

from flask_restful import Resource
# ...

class People(Resource):
    def get(self):
        return [{'name': 'John Doe'}, {'name': 'Mary Canary'}]

class Person(Resource):
    def get(self, id):
        return {'name': 'John Doe'}
# ...

api.add_resource(People, '/api/people')
api.add_resource(Person,  '/api/people/<string:id>')
Run Code Online (Sandbox Code Playgroud)

kar*_*daj 5

我认为这是您要寻找的:

from flask_restful import Resource
# ...


class People(Resource):

    def get(self, id=None):
        if not id:
            return {'name': 'John Doe'}
        return [{'name': 'John Doe'}, {'name': 'Mary Canary'}]


api.add_resource(People, '/api/people', '/api/people/<id>')
Run Code Online (Sandbox Code Playgroud)

您可以限制id购买,将其添加为请求解析器的参数:

parser.add_argument('id', location='view_args', type=..)
Run Code Online (Sandbox Code Playgroud)


sie*_*rts 0

是的,查看参数解析文档。如果需要,这将使您可以灵活地围绕随请求接收的参数创建一些逻辑。

from flask_restful import Api, Resource, reqparse
# ...

api = Api(app)
parser = reqparse.RequestParser()
parser.add_argument('id')

class People(Resource):
def get(self):
    data = parser.parse_args()
    if not data['id']:
        return [{'name': 'John Doe'}, {'name': 'Mary Canary'}]
    else:
        # data lookup using id
        # for example using SQLAlchemy...
        # person = Person.query.filter_by(id = data['id']).first_or_404()
        return {'id': data['id'], 'name': 'John Doe'}

api.add_resource(People, '/api/people')
Run Code Online (Sandbox Code Playgroud)

然后尝试:

  • 本地主机:/api/people
  • 本地主机:/api/people?id=1