在Flask中最有效地利用蓝图?

时间:2019-05-29 17:58:10

标签: flask

我想尝试使用工作瓶将我日常存在的java / jython / python 2.5个人地狱软件重建为单页应用程序(如果可能)。

在路由,将表单发布到数据库以及从数据库读取以模板化页面方面,我对flask非常熟悉。但是到目前为止,每次我制作蓝图似乎都是为了分离关注点而做的,我从来没有重复使用带有不同后缀的蓝图,但是现在我认为它可能适合这种情况。

我有多个业务实体,都必须遵循CRUD周期。发票,销售订单,报价单等。每一个都应该有确切的四个路线

<entity name>/create有一个GET返回相应的HTML网页,还有一个POST,它将把表单字段发送到相应数据库表的相应列。

<entity name>/read/<id>只有一个GET可以返回HTML页,其中的实体表单已经用数据库中的信息填充了。

<entity name>/update/<id>仅具有POST,以便在采取措施后更新读取路径中的页面。

<entity name>/delete/<id>仅具有POST路由。

鉴于这4条路线是每个实体所需的唯一路线,是否会成为1)建议对所有这些实体都使用一张通用蓝图?如果是这样,2)我将如何设置数据库表名称/文件夹结构以最好地利用通用蓝图?

也值得注意的是,某些实体不仅需要更新共享其名称的数据库表,还需要更新一些多键表,而其他实体则不需要。我知道这是一个通用的问题,因此我尝试添加详细信息,我可以在需要的地方添加更多详细信息。

1 个答案:

答案 0 :(得分:0)

设置蓝图的最佳方法:

将所有用于路由,表单,后台实用程序的python文件以及适用的html模板的templates文件夹放到上述每个CRUD部分的单独文件夹中。

对于每个文件夹(例如'folder_name'),其 init .py包含:

from flask import Blueprint
from flask_breadcrumbs import default_breadcrumb_root

bp = Blueprint('folder_name', __name__, template_folder='templates')
default_breadcrumb_root(bp, '.')

from app.folder_name import routes

各种route.py应该包含诸如以下的路由:

@bp.route('/read', methods=['GET'], strict_slashes=False)
@register_breadcrumb(bp, '.this.that', 'My Breadcrumb')

位于“ app”的一个文件夹中,“ init .py”中的create_app函数应包含:

from app.folder_name import bp as one_bp
app.register_blueprint(one_bp, url_prefix='/<entity_name>')
# etc, for each app/<folder>

我已将“面包屑”添加到此应用程序结构中。菜单可以类似地包含在内。