我来自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
答案 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的框架中实现的,按照其设计,它试图做到不受限制和灵活。