【问题标题】:Verbose routes in FlaskFlask 中的详细路由
【发布时间】:2018-09-12 13:28:22
【问题描述】:

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

所以不是

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 引擎进行比较的蓝图,但这不是我正在寻找的那种分区。我怎样才能让我的路线关于我的路线而不是关于它们的实施?我真的必须升级到 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

【问题讨论】:

    标签: python flask


    【解决方案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 中开箱即用,根据它的设计,它试图不拘一格和灵活。

    【讨论】:

      猜你喜欢
      • 2021-09-14
      • 2014-01-02
      • 2011-01-25
      • 2012-04-16
      • 2020-09-04
      • 1970-01-01
      • 2013-09-01
      • 2014-12-15
      • 1970-01-01
      相关资源
      最近更新 更多