使用基于类的视图管理Flask中URL的可选动态段

时间:2016-07-23 21:22:18

标签: python flask

我想重现在使用基于Flask类的视图时将多个URL链接到一个端点的行为。 使用经典的Flask视图我会这样做:

@app.route("/users")
@app.route("/users/<int:id>", defaults={"id": None})
def users(id):
    # Function

但是如何使用app.add_url_rule使用基于类的视图重现此行为?

1 个答案:

答案 0 :(得分:1)

通常,在您定义基于班级的视图后,只需add_url_rule每条路线的规则,并采用Flask's Docs中提到的示例:

class UserAPI(MethodView):

    def get(self, user_id):
        if user_id is None:
            # return a list of users
            pass
        else:
            # expose a single user
            pass

    def post(self):
        # create a new user
        pass

    def delete(self, user_id):
        # delete a single user
        pass

    def put(self, user_id):
        # update a single user
        pass

然后您可以将路线添加为:

user_view = UserAPI.as_view('user_api')
app.add_url_rule('/users/', defaults={'user_id': None},
                 view_func=user_view, methods=['GET',])
app.add_url_rule('/users/', view_func=user_view, methods=['POST',])
app.add_url_rule('/users/<int:user_id>', view_func=user_view,
                 methods=['GET', 'PUT', 'DELETE'])