Flask 学习笔记(九)-项目拆分

11 篇文章 0 订阅
10 篇文章 1 订阅

项目拆分

  • 目的
    • 解耦合
    • 代码结构更清晰
拆分方案
  • 一拆六
  • 以前就一个manage文件
    • manage进行全局控制
    • 在应用初始化做初始化
      • 初始化配置
      • 初始化路由
      • 初始化第三方
    • 配置文件
      • 配置项目所需各种信息
    • 视图函数
      • 用来处理业务逻辑,协调模板和模型
    • 模型文件
      • 定义模型
    • 外部扩展
      • 统一管理扩展
项目结构
  • manage.py 用来控制程序的
  • App/init 初始化文件
    • 初始化整个Flask对象,以及Flask所用的各种插件
  • App/settings 项目配置文件
    • 配置整个项目运行环境
  • App/ext
    • 项目的扩展库
    • 第三方扩展库打包处理
  • App/views
    • 视图函数
    • 处理业务逻辑
    • 协调模板和模型之间的关系
  • App/models
    • 模型
    • 定义模型结构
    • 获得数据库中的表的关系映射
      在这里插入图片描述
      在这里插入图片描述
新建项目

在这里插入图片描述
manage.py

from flask_migrate import MigrateCommand
from flask_script import Manager
from App import create_app

app = create_app()
manager = Manager(app=app)
# 添加命令行操作
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
    manager.run()

初始化,因为模板文件默认在当前app目录下,所以要传入上级目录‘…/templates’,此处仿照Django使用绝对路径
加载配置文件中的develop(开发环境),在配置文件中有多套环境,方便更换。
App/init.py

from flask import Flask
from App.ext import init_ext
from App.settings import envs
from App.views import init_blue

def create_app():
    app = Flask(__name__, template_folder=settings.TEMPLATE_FOLDER)
    # 初始化配置
    app.config.from_object(envs.get('develop'))

    # 注册蓝图,初始化蓝图
    init_blue(app)
    # 初始化第三方插件,库
    init_ext(app)
    return app

App/settings.py

环境
  • 开发环境
    • 开发人员专用环境
  • 测试环境
    • 测试环境和开发环境是不一样的
    • 它测试的时候,指的是你送测版本
  • 演示环境
    • 无限接近于线上环境的
    • 要让产品确认
  • 线上环境
    • 生产环境
    • 真实用户环境
    • 深夜三点
import os
# 绝对路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

TEMPLATE_FOLDER = os.path.join(BASE_DIR, 'templates')
def get_db_uri(dbinfo):
    """ database setting """
    ENGINE = dbinfo.get('ENGINE') or 'mysql'
    DRIVER = dbinfo.get('DRIVER') or 'pymysql'
    USER = dbinfo.get('USER') or 'root'
    PASSWORD = dbinfo.get('PASSWORD') or 'root'
    HOST = dbinfo.get('HOST') or 'localhost'
    PORT = dbinfo.get('PORT') or '3306'
    NAME = dbinfo.get('NAME') or 'test'
    return "{}+{}://{}:{}@{}:{}/{}".format(ENGINE, DRIVER, USER, PASSWORD, HOST, PORT, NAME)


class Config:
    DEBUG = False
    TESTING = False
    SECRET_KEY = "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"
    SQLALCHEMY_TRACK_MODIFICATIONS = False

class DevelopConfig(Config):
    """ 开发环境配置 """
    DEBUG = True

    DATABASE = {
        "ENGINE": 'mysql',
        'DRIVER': 'pymysql',
        'USER': 'root',
        'PASSWORD': 'rock1204',
        'HOST': 'localhost',
        'PORT': '3306',
        'NAME': 'Python1804FlaskProject'
    }

    SQLALCHEMY_DATABASE_URI = get_db_uri(DATABASE)


class TestingConfig(Config):
    """ 测试环境配置 """
    TESTING = True

    DATABASE = {
        "ENGINE": 'mysql',
        'DRIVER': 'pymysql',
        'USER': 'root',
        'PASSWORD': 'rock1204',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'NAME': 'Python1804FlaskProjectTesting'
    }

    SQLALCHEMY_DATABASE_URI = get_db_uri(DATABASE)


class StagingConfig(Config):
    """ 演示环境配置 """
    DATABASE = {
        "ENGINE": 'mysql',
        'DRIVER': 'pymysql',
        'USER': 'root',
        'PASSWORD': 'rock1204',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'NAME': 'Python1804FlaskProjectStaging'
    }

    SQLALCHEMY_DATABASE_URI = get_db_uri(DATABASE)


class ProductConfig(Config):
    """ 上线环境配置 """
    DATABASE = {
        "ENGINE": 'mysql',
        'DRIVER': 'pymysql',
        'USER': 'root',
        'PASSWORD': 'rock1204',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'NAME': 'Python1804FlaskProjectProduct'
    }

    SQLALCHEMY_DATABASE_URI = get_db_uri(DATABASE)


envs = {
    'develop': DevelopConfig,
    'testing': TestingConfig,
    'staging': StagingConfig,
    'product': ProductConfig
}

App/models.py
添加一个学生模型

from App.ext import db
class Student(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    s_name = db.Column(db.String(16))
数据迁移
  • 将模型映射到数据库中
  • 使用flask-migrate库
  • 安装,使用
    • pip install flask-migrate
    • 初始化 需要使用app和数据库进行初始化 migrate = Migrate(app, db)
    • 配置flask-script的命令
      • manager.add_command(‘db’, MigrateCommand)
  • 指令使用
    • python manage.py db init
      • init 初始化指令,仅可调用一次
    • migrate
      • 生成迁移文件
      • 内部迁移文件使用了链表来关联关系
    • upgrade
      • 执行迁移文件
      • 数据库内容升级
      • –message MSG 对迁移添加日志
    • downgrade
      • 执行迁移文件
      • 数据库降级
      • 相当于后悔药
    • –help
      • 帮助文档

App/views.py
在views中添加几个url用来对学生增删改查,详细见github代码

使用时先初始化数据库:python manage.py db init
这时会出现migrations文件夹。

如果想更新表执行:python manage.py db upgrade
如果想回退表执行:python manage.py db downgrade

修改models.py

class People(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    p_name = db.Column(db.String(16))

创建迁移文件

python manage.py db migrate --message '创建人模型'

调用upgrade继续更新表

python manage.py db upgrade

之后在数据库中可以看到新加的People模型

源码地址:https://github.com/565785929/StudyFlask/tree/master/d09

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sajor_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值