Flask——分包构建

本文介绍如何通过包结构和Blueprints重构大型Flask应用,包括目录结构调整、环境变量配置、循环导入解决及Blueprints使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个小型的Flask应用的目录结构一般是这样的

/yourapplication
    yourapplication.py
    /static
        style.css
    /templates
        layout.html
        index.html
        login.html
        ...

上面结构非常适合小型项目,但对大型项目来说,我们一般会用包来表示模块,这有个示例就是用包的形式构建的。

包结构

对更大一点的项目,我们仅仅需要在yourapplication里创建一个同名文件夹,并把所有内容移动到新的yourapplication里面。 将yourapplication.py 重命名为__init__.py。(确定此前已经删除了所有的.pyc文件,否则很可能会崩溃)
这样,新的目录结构如下:

/yourapplication
    /yourapplication
        __init__.py
        /static
            style.css
        /templates
            layout.html
            index.html
            login.html

但是application的运行与以前不同,直接执行python yourapplication/__init__.py不会起作用。这说明Python不希望把包里面的modules当做一个启动文件。我们只需要在内层的yourapplication文件夹中创建一个setup.py文件,setup.py的内容如下:

from setuptools import setup

setup(
    name='yourapplication',
    packages=['yourapplication'],
    include_package_data=True,
    install_requires=[
        'flask',
    ],
)

为了运行application我们还需要导出一个环境变量:

$ export FLASK_APP=yourapplication

确定当前的工作目录是否在项目的文件夹下,与上面相似可以用如下命令开启开发模式:

$ export FLASK_ENV=development

执行如下命令,运行application:

$ pip install -e .
$ flask run

这样做有什么用?现在我们能够将一个application重构成多module的形式。我们只需要注意如下问题:

  • 1 Flask的application对象必须在__init__.py中创建,这种方式能够让每一个module都能够引入它。
  • 2 所有的view方法(在顶部有route()装饰的方法)均在__init__.py文件中被引入,__init__.py引入这些文件要在application对象创建后

__init__.py的示例代码:

from flask import Flask
app = Flask(__name__)

import yourapplication.views

所有的view.py文件要想下面这样:

from yourapplication import app

@app.route('/')
def index():
    return 'Hello World!'

最终得到的目录结构如下

/yourapplication
    setup.py
    /yourapplication
        __init__.py
        views.py
        /static
            style.css
        /templates
            layout.html
            index.html
            login.html

循环Import

python项目中不希望出现循环Import,当刚刚我们添加了循环Import(两个module互相依赖,在示例中__init__.py和view.py互相依赖)。通常情况下这种写法很差,但在这里非常适合。原因是因为在__init__.py中我们并没有真正的去使用views,仅仅是确保modules被引入进来,并且,我们的import代码放在了__init__.py文件的底部。

使用Blueprints

如果是一个更大的项目,推荐使用Blueprints。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值