Flask的详细路线

时间:2018-09-12 13:28:23

标签: python flask

我来自Rails背景,我发现烧瓶路线很快变得非常混乱。好像flask鼓励您将所有控制器逻辑都放入路由/应用程序定义中。

所以不是

resources :users

并将实现扔到users_controller.py

我明白了

@app.route("/users"), methods=["GET"]
def list_users():
    return ..

@app.route("/users/new"), methods=["GET"]
def new_user():
    return render_template("new")

@app.route("/users"), methods=["POST"]
def create_user()
    ....

然后添加另外4个动作。真的需要吗?

我尝试过的蓝图似乎可以与Rails Engines进行比较,但这不是我想要的那种分区。如何制作我的路线而不是路线的实现?我真的必须升级到Django吗?

编辑

换句话说,也许是一种更清晰的方式:我希望将这些方法从我的app.py文件中删除。而且我想要比route()更高的抽象来定义CRUD资源。像

app.resources("users", controller=UsersController)

或更妙的是,让Flask根据资源名称解析控制器。

然后,UsersController将看起来像这样

class UsersController:

    def index():
        pass

    def show(user_id):
        pass

    def new():
        pass

    def create():
        pass

    def edit(user_id):
        pass

    def update():
        pass

    def delete():
        pass

1 个答案:

答案 0 :(得分:1)

您是否正在寻找这个? flask.pocoo.org/docs/1.0/views涵盖了可插入的视图,请查看extending MethodView的最后一部分。

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

请注意,CRUD视图的实现并不是在Flask的框架中实现的,按照其设计,它试图做到不受限制和灵活。