【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)

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

相关推荐
贤哥哥yyds26 分钟前
GBK转UTF\-8编码自动转换工具 使用文档
python
数量技术宅34 分钟前
2026量化前沿:从Reddit热帖到Python实战,如何用赫斯特指数(Hurst)狙击虚假突破?
开发语言·python
华如锦41 分钟前
面了很多 Java转AI Agent方向,一些面试题总结
java·开发语言·人工智能·python·ai
戴西软件1 小时前
戴西 DLM 许可授权管理系统:破解无网络环境下工业软件授权难题,助力制造企业降本增效
网络·人工智能·python·深度学习·程序人生·算法·制造
Dxy12393102161 小时前
Python线程锁:为什么多线程会“打架“,以及怎么解决
开发语言·前端·python
小白学大数据1 小时前
线上故障急救:依托 OpenClaw 日志排查 403 和 503 问题
爬虫·python·selenium·数据分析
fox_lht2 小时前
15.3.改进我们之前的输入、输出项目
开发语言·后端·学习·rust
databook2 小时前
用SymPy自动因式分解:从面积拼图到代数恒等式
python·数学·动效
大鸡腿同学2 小时前
用 AI 肝了一个星期的智能客服助手,看看怎么个事
后端