使用蓝图为 Flask 动态生成路由

Posted

技术标签:

【中文标题】使用蓝图为 Flask 动态生成路由【英文标题】:Dynamically generate routes for Flask using blueprints 【发布时间】:2015-07-05 09:39:24 【问题描述】:

我喜欢为托管在 Google App Engine 上的 Flask 应用生成路由。目前我正在使用蓝图来生成路线。比如

conference_routes = Blueprint('conference_routes', __name__)


@conference_routes.route('/home/Conferences/QCCC-Mappleton-2015')
def mappleton_conference():
    return render_template('Mappleton-2015.html')

然后我像这样从 main.py 注册蓝图

app.register_blueprint(conference_routes)

这变得非常麻烦,尤其是当我们有超过 100 条路线时。我希望在数据库中定义路由并在运行时动态构建它们。

这可能吗?

【问题讨论】:

【参考方案1】:

This答案显示.add_url_rule的使用:

for page in session.query(Page):
route = u'/0/1/2'.format(page.id1, page.id2, page.id3)
app.add_url_rule(
    route,
    page.name,  # this is the name used for url_for
    partial(actual_handler, page=page),
)

This answer 提供了设置这些路由的有用信息,this answer 也有几个很好的例子。

听起来您想在设置应用变量后立即添加所有路由:

conference_routes = Flask(__name__)
# load info from database
# insert routes

如果您的文件都像您的示例一样是 1-1,那么您甚至不需要该路由加载方法 - 只需从 url 中查找文件:

@conference_routes.route('/<path:path>')
def search_file(path):
    # (in)validate path
    # return html template or 404

【讨论】:

以上是关于使用蓝图为 Flask 动态生成路由的主要内容,如果未能解决你的问题,请参考以下文章

从 Dash/Flask 应用程序下载动态生成的文件

小知识点免费头像API,用 Python Flask 动态生成一个汉字头像

小知识点免费头像API,用 Python Flask 动态生成一个汉字头像

生成后在 Nuxt SPA 中使用动态路由

vue-router-auto动态生成路由插件

如何在 routes.js 中为生成的菜单项在通用反应 redux 样板中的边栏中实现动态路由,由 erikras