Flask 项目结构

组织一个 Flask 项目通常需要遵循一定的结构,以便代码清晰、可维护。下面是一个典型的 Flask 项目结构:

my_flask_app/
│
├── app/
│   ├── __init__.py
│   ├── models.py
│   ├── views.py
│   ├── forms.py
│   ├── templates/
│   │   ├── base.html
│   │   ├── index.html
│   └── static/
│       ├── css/
│       ├── js/
│       └── images/
│
├── migrations/
│
├── tests/
│   ├── __init__.py
│   ├── test_app.py
│
├── venv/
│
├── config.py
│
├── manage.py
│
├── requirements.txt
│
└── README.md

目录和文件说明

app/
  • __init__.py: 初始化 Flask 应用,注册蓝图和扩展。
  • models.py: 数据库模型定义。
  • views.py: 视图函数,处理路由和请求。
  • forms.py: 表单定义(如果使用 Flask-WTF)。
  • templates/: HTML 模板文件。
  • static/: 静态文件(CSS、JavaScript、图像等)。
migrations/
  • 数据库迁移文件夹,用于存储 Alembic 生成的迁移脚本。
tests/
  • 测试代码文件夹。
venv/
  • 虚拟环境文件夹。
config.py
  • 配置文件,存储应用配置变量。
manage.py
  • 管理脚本,用于启动应用和其他管理任务。
requirements.txt
  • 依赖文件,列出所有需要安装的 Python 包。
README.md
  • 项目说明文件,提供项目的基本信息和使用说明。

具体代码示例

app/__init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

db = SQLAlchemy()
migrate = Migrate()

def create_app():
    app = Flask(__name__)
    app.config.from_object('config')

    db.init_app(app)
    migrate.init_app(app, db)

    from .views import main as main_blueprint
    app.register_blueprint(main_blueprint)

    return app
app/models.py
from . import db

class Author(db.Model):
    __tablename__ = "authors"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(16), unique=True)
    books = db.relationship("Book", backref="author")

class Book(db.Model):
    __tablename__ = "books"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(100), unique=True)
    author_id = db.Column(db.Integer, db.ForeignKey('authors.id'))
app/views.py
from flask import Blueprint, render_template
from .models.py import Author, Book

main = Blueprint('main', __name__)

@main.route('/')
def index():
    authors = Author.query.all()
    return render_template('index.html', authors=authors)
config.py
import os

basedir = os.path.abspath(os.path.dirname(__file__))

class Config:
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'a_really_secure_key'
    SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db')
    SQLALCHEMY_TRACK_MODIFICATIONS = False

也可以这样 

config
├── Config.py
├── __init__.py

config/__init__.py

from .Config import Config
from .Config import ProductionConfig
from .Config import DevelopmentConfig
from .Config import TestingConfig

 config/Config.py

class Config(object):
    """Base config, uses staging database server."""
    TESTING = False
    DB_SERVER = '192.168.1.56'

    @property
    def DATABASE_URI(self):  # Note: all caps
        return f"mysql://user@{self.DB_SERVER}/foo"


class ProductionConfig(Config):
    """Uses production database server."""
    DB_SERVER = '192.168.19.32'


class DevelopmentConfig(Config):
    DEBUG = True
    DB_SERVER = 'localhost'


class TestingConfig(Config):
    DB_SERVER = 'localhost'
    DATABASE_URI = 'sqlite:///:memory:'

manage.py
from app import create_app

app = create_app()

if __name__ == "__main__":
    app.run()
requirements.txt
Flask
Flask-SQLAlchemy
Flask-Migrate

启动应用

  1. 安装依赖:
pip install -r requirements.txt
  1. 初始化数据库:
flask db init
flask db migrate -m "Initial migration."
flask db upgrade
  1. 运行应用:
python manage.py

结论

通过遵循以上结构,您可以构建一个清晰、可维护的 Flask 项目。这个结构提供了一个基础,您可以根据需要进行扩展和修改。

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值