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

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

相关推荐
雨墨✘12 分钟前
CSS如何提高团队协作效率_推广BEM规范减少样式沟通成本
jvm·数据库·python
hef28817 分钟前
如何实现SQL字段值的计算输出:算术运算符与别名结合
jvm·数据库·python
程序员张317 分钟前
自定义跨字段校验必填注解
java·后端
2401_8274999918 分钟前
python项目实战11-正则表达式基础
python·mysql·正则表达式
小糖学代码28 分钟前
LLM系列:1.python入门:6.元组型对象(tuple)
linux·运维·服务器·python
ZC跨境爬虫28 分钟前
Scrapy实战:5sing原创音乐网多页数据爬取(完整可运行,附避坑指南)
爬虫·python·scrapy·html
那个失眠的夜30 分钟前
Spring 的纯注解配置
xml·java·数据库·后端·spring·junit
Rust研习社32 分钟前
Rust 堆内存指针 Box 详解
开发语言·后端·rust
ffqws_35 分钟前
Spring Boot:用JWT令牌和拦截器实现登录认证(含测试过程和关键注解讲解)
java·spring boot·后端
西西弗Sisyphus36 分钟前
Python dataclasses 中 field 的 default_factory 参数用法
python·field·dataclasses·default_factory