在Flask中创建Web应用的Python包和模块

2 投票
1 回答
1803 浏览
提问于 2025-04-17 14:46

目前,我正在为一家公司编写一个网页界面。

这个网页界面是基于Python的一个小框架Flask。我想用MVC的原则来构建这个界面。现在我有一些问题。

模型部分会使用SQLAlchemy来处理数据的映射,这里没有问题。
视图部分会用一些HTML和CSS,我觉得这里也不会有问题。

但是控制器部分就有点麻烦了。
我想把页面分成不同的模块,把脚本应用也分成不同的模块,然后把这些模块打包成一个控制器的包,比如说:

  • 会话模块(登录/登出/ Cookies)
  • 管理员模块(管理注册账户/内容等)
  • 应用脚本1模块
  • 应用脚本2模块
  • 应用脚本3模块

我知道要渲染模板需要使用路由等功能。但是我该怎么做才能让某个链接被调用时,能够调用特定的模块并从中提取方法呢?我可以创建一个主控制器来处理路由,然后在路由的每个方法中导入上面提到的一个模块吗?

@app.route('/')
  def index():
    return render_template("index.html")

@app.route('/login/', methods = ('GET', 'POST'))
  def login():
    from session import login
    -> call method from 'login' here

@app.route('/account/<username>', methods = ('GET', 'POST'))
  def login():
    from administrator import view_account
    -> call method from 'view_account' here

这样做算是好习惯吗?还是说我应该从头开始,把这个包中的每个模块都导入进来?我最初的想法是为了避免因为脚本的大小而导致应用加载过慢,只有在访问需要某个模块的页面时才调用该模块,类似这样的做法。

1 个回答

3

如果我理解你的问题没错的话,你肯定是想使用蓝图(blueprints) :) 可以在这里了解更多信息。

简单来说,蓝图是让Flask应用变得模块化的一种方法,这样就不需要把所有模块都放在一个控制器里,也不需要用其他复杂的方法。

在这里你可以找到一个使用蓝图的应用示例

撰写回答