python - Flask 中的详细路由
问题描述
我来自 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
解决方案
你在找这个吗?flask.pocoo.org/docs/1.0/views 涵盖了可插入的视图,请查看扩展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 中开箱即用,根据它的设计,它试图不拘一格和灵活。
推荐阅读
- ruby-on-rails - 错误:注销链接中未定义的局部变量或方法“删除”
- node.js - 如何将nodejs selenium 文件上传到实时服务器?
- r - R:rhandsontable 不显示过滤后的反应内容
- php - 使用 PHP 过滤掉只包含双引号的结果
- dart - 如何在同一个文本小部件中制作不同的样式?
- json - 在反应本机中访问对象中的对象
- vba - MS 访问 DoCmd.SendObject acSendReport 报告的条件内容
- javascript - 列出使用特定 JS 文件的网站页面
- android - 如何使用 xml 定义创建铅笔图标?
- android - 如何从系统托盘中读取推送通知数据。?