【Flask框架】10、Flask项目拆分规范

一、项目拆分

在实际开发中,为了更好的管理和维护大型的Flask项目。通常会采用模块化的方式来组织代码。这种方式通常会将主应用与各个模块(Blueprint)分离。并且将静态资源和模版文件分开管理。以下是一个典型的项目结构示例:

plaintext 复制代码
my_flask_app/
├── app/
│   ├── __init__.py
│   ├── auth/
│   │   ├── __init__.py
│   │   ├── views.py
│   │   ├── forms.py
│   │   ├── templates/
│   │   │   └── auth/
│   │   │       └── login.html
│   │   └── static/
│   │       └── css/
│   │           └── style.css
│   ├── blog/
│   │   ├── __init__.py
│   │   ├── views.py
│   │   ├── models.py
│   │   ├── templates/
│   │   │   └── blog/
│   │   │       └── post.html
│   │   └── static/
│   │       └── js/
│   │           └── script.js
│   ├── admin/
│   │   ├── __init__.py
│   │   ├── views.py
│   │   ├── templates/
│   │   │   └── admin/
│   │   │       └── dashboard.html
│   │   └── static/
│   │       └── images/
│   │           └── logo.png
│   └── main/
│       ├── __init__.py
│       ├── views.py
│       ├── templates/
│       │   └── main/
│       │       └── index.html
│       └── static/
│           └── favicon.ico
├── config.py
├── run.py
└── requirements.txt

二、项目结构说明

  1. app 目录

    • 这是所有功能模块(Blueprints)的根目录。
    • 每个功能模块都有自己的子目录,如 auth, blog, admin, main 等。
    • 每个子目录内包含了该功能模块的视图函数 (views.py)、模型 (models.py)、表单 (forms.py) 等。
    • 每个功能模块都有自己的 statictemplates 目录,用于存放静态文件和模板文件。
  2. 功能模块 (auth, blog, admin, main)

    • 每个功能模块都是一个独立的 Blueprint。
    • __init__.py 文件用于初始化 Blueprint,并注册路由和其他组件。
    • views.py 包含该功能模块的所有视图函数。
    • models.py 包含数据库模型定义。
    • forms.py 包含表单定义。
    • static 目录存放该功能模块所需的静态文件。
    • templates 目录存放该功能模块所需的模板文件。
  3. config.py

    • 包含应用的配置信息,如数据库连接字符串、密钥等。
  4. run.py

    • 启动 Flask 应用的入口文件,通常在这里初始化应用并注册所有 Blueprint。
  5. requirements.txt

    • 列出项目依赖的第三方库及其版本。

三、示例代码

app/__init__.py

python 复制代码
from flask import Flask
from .main import main as main_bp
from .auth import auth as auth_bp
from .blog import blog as blog_bp
from .admin import admin as admin_bp

def create_app():
    app = Flask(__name__)
    app.config.from_object('config')
    
    # 注册蓝图
    app.register_blueprint(main_bp)
    app.register_blueprint(auth_bp)
    app.register_blueprint(blog_bp)
    app.register_blueprint(admin_bp)
    
    return app

run.py

python 复制代码
from app import create_app

app = create_app()

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

​ 这种项目结构有助于将不同功能模块分离,使得代码更加模块化、可维护和可扩展。每个功能模块都有自己的静态资源和模板文件,这样可以更好地组织和管理文件。此外,这种结构也方便了团队协作,不同的开发人员可以专注于不同的功能模块。

相关推荐
IT_陈寒2 小时前
React的这个渲染问题连官方文档都没说清楚
前端·人工智能·后端
金銀銅鐵3 小时前
[Python] 扩展欧几里得算法
python·数学·算法
Duckdblab3 小时前
DuckDB 性能调优终极指南:打造闪电般的分析体验
python
葫芦和十三3 小时前
图解 MongoDB 15|journal 与持久化:写入怎么不丢,崩溃怎么恢复
后端·mongodb·面试
葫芦和十三3 小时前
图解 MongoDB 16|压缩:snappy、zstd 和 zlib 的取舍
后端·mongodb·面试
苍何3 小时前
终于找到免费开源TTS模型,克隆声音不要钱,本地电脑也能跑
后端
用户593608741404 小时前
Spring AI 集成 DeepSeek 原生供应商并实现think模式
后端
追逐时光者4 小时前
别再满网找零散工具了,腾讯 QQ 浏览器这个“帮小忙”工具箱真能省时间
前端·后端
心静自然凉8004 小时前
Linux网络核心知识+bonding主备模式配置
后端
带派擂总4 小时前
Python全栈开发精华版最全合集(包含各种面试题) Day24_异常和错误
python