以下是有关于 Flask 项目结构的指南,包含目录和参考资料的出站链接,帮助你理解如何组织一个 Flask 应用的代码和文件。


目录

  1. 为什么需要项目结构
  2. 小型项目结构
  3. 大型项目结构
  4. 最佳实践
  5. 参考资料

为什么需要项目结构

随着 Flask 项目规模的增长,良好的项目结构可以提高代码的可维护性、可读性和扩展性。合理的文件组织有助于分离逻辑、模板和静态资源,避免代码混乱。


小型项目结构

对于简单应用(如测试或原型),所有代码可以放在一个文件中。但稍微规范一点的小型项目通常如下组织:

my_flask_app/
├── app.py           # 主应用文件
├── static/          # 静态文件(如 CSS、JS、图片)
│   └── style.css
├── templates/       # HTML 模板文件
│   └── index.html
└── requirements.txt # 依赖列表

示例 app.py

from flask import Flask, render_template

app = Flask(__name__)

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

if __name__ == '__main__':
    app.run(debug=True)

示例 requirements.txt

Flask==2.3.2
  • 适用场景:学习、实验或小型工具。
  • 运行方式python app.py

大型项目结构

对于需要多个模块、数据库或复杂功能的应用,推荐使用“应用工厂”模式和模块化结构:

my_flask_project/
├── app/                    # 应用主目录
│   ├── __init__.py         # 初始化应用(工厂函数)
│   ├── routes.py           # 路由定义
│   ├── models.py           # 数据库模型
│   ├── static/             # 静态文件
│   │   └── style.css
│   ├── templates/          # 模板文件
│   │   ├── base.html       # 基础模板
│   │   └── home.html       # 主页模板
│   └── config.py           # 配置文件
├── instance/               # 敏感配置或实例特定文件
│   └── config.py           # 例如数据库密钥
├── tests/                  # 测试文件
│   └── test_routes.py
├── run.py                  # 启动脚本
├── requirements.txt        # 依赖列表
└── .gitignore              # Git 忽略文件

示例文件

  1. app/__init__.py
from flask import Flask

def create_app():
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_pyfile('config.py', silent=True)  # 从 instance 文件夹加载配置

    # 注册蓝图或路由
    from . import routes
    app.register_blueprint(routes.bp)

    return app
  1. app/routes.py
    “`python
    from flask import Blueprint, render_template

bp = Blueprint(‘main’, name)

@bp.route(‘/’)
def home():
return render_template(‘home.html’)

  1. run.py

    from app import create_app

app = create_app()

if name == ‘main‘:
app.run(debug=True)

  • 适用场景:中大型项目、需要团队协作或长期维护的应用。
  • 运行方式python run.py

最佳实践

  1. 使用蓝图 (Blueprints):将路由分组到模块中(如 routes.py),便于管理。
  2. 分离配置:将配置放入 config.pyinstance/config.py,避免硬编码。
  3. 版本控制依赖:在 requirements.txt 中列出所有依赖及其版本。
  4. 模板继承:在 templates/base.html 中定义通用布局,其他页面继承。
  5. 测试:将测试代码放入 tests/ 文件夹,使用 pytestunittest

参考资料


这种结构可以根据项目需求调整。如果需要具体模块的实现细节(例如数据库集成),请告诉我!