flask03

作者: fly5 | 来源:发表于2018-10-20 15:17 被阅读0次

    一、flask-migrate插件

    • 模型迁移
    在Django中,每次添加新的模型类,只需要执行生成迁移文件,执行迁移操作;
        python manager.py makemigrations
        python manager.py migrate
    
    在Flask中,先创建一个路由对应视图函数中db.create_all()方法,每次添加新的模型类,都要调用该路由才能创建;
    flask是否可以类似于Django一样?   flask-migrate插件
    
    • 官方文档
    https://flask-migrate.readthedocs.io/en/latest/
    
    • 安装
    pip install Flask-Migrate
    
    • 配置
    # 实例化Migrate对象
    migrate = Migrate(app, db)
    # 添加db命令
    manager.add_command('db', MigrateCommand)
    
    • flask-migrate + flask-script 使用
    $ python manager.py db init         # 创建迁移目录(只需执行一次)
    $ python manager.py db migrate      # 生成迁移文件
    $ python manager.py db upgrade      # 执行迁移(生成表单)
    $ python manager.py db downgrade    # 回退操作
    $ python manager.py db --help       # 帮助文档
    

    二、数据库配置

    • 使用sqlite
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////' + os.path.join(BASE_DIR, 'app.db')
    
    • 使用mysql
    # SQLALCHEMY_DATABASE_URI
    dialect+driver://username:password@host:port/databasename
    dialect     数据库
    driver      驱动
    username    数据库用户名
    password    数据库密码
    host        数据库主机
    port        数据库端口号
    databasename    数据库 库名
    
    • 连接mysql
    - 安装驱动
        pip install pymysql
        
    - 创建数据库
        create database xxx charset=utf8;
        
    - 配置数据库
        URI = 'mysql+pymysql://root:1234@127.0.0.1:3306/xxx'
        app.config['SQLALCHEMY_DATABASE_URI'] = URI
    

    三、项目拆分

    • 插件
    flask-print
    flask-blueprint
    flask-session
    flask-sqlalchemy
    flask-migrate
    
    • 基本划分
    __init__.py # 包
    views.py    # 路由、视图函数
    models.py   # 模型类
    setting.py  # 配置
    ext.py      # 扩展
    
    • settings.py
    import os
    
    BASE_DIR = os.path.dirname(os.path.abspath(__file__)
    
    def get_database_uri(DATABASE):
        db = DATABASE.get('DATABASE') or 'mysql'
        driver = DATABASE.get('DRIVER') or 'pymysql'
        user = DATABASE.get('USER') or 'root'
        password = DATABASE.get('PASSWORD') or '1234'
        host = DATABASE.get('HOST') or '127.0.0.1'
        port = DATABASE.get('PORT) or '3306'
        databasename = DATABASE.get('DATABASENAME)
        
        return '{}+{}://{}:{}@{}:{}/{}'.format(db,driver,user,password,host,port,databasename)
    
    # 配置基类
    class BaseConfig():
        DEBUG = False
        TESTING = False
        # 秘钥 session
        SECRET_KEY = '123$^^%&^^$DJD'
        # flask-session 持久化
        SESSION_TYPE = 'redis'
        
    # 开发环境(默认环境)
    class DevelopConfig(BaseConfig):
        DEBUG = True
        # 数据库
        SQLALCHEMY_DATABASE_URI = 'splite:////' + os.path.join(BASE_DIR, 'develop.db')
        
    # 测试环境
    class TestingConfig(BaseConfig):
        TESTING = True
        # 数据库
        SQLALCHEMY_DATABASE_URI = os.path.join(BASE_DIR, 'testing.db')
        
    # 演示环境
    class StagingConfig(BaseConfig):
        TESTING = True
        # 数据库
        SQLALCHEMY_DATABASE_URI = os.path.join(BASE_DIR, 'staging.db')
        
    # 线上环境
    class ProductConfig(BaseConfig):
        # 数据库配置
        DATABASE = {
            'DATABASE':mysql,
            'DRIVER':'pymysql',
            'USER':'root',
            'PASSWORD':'1234',
            'HOST':'127.0.0.1',
            'PORT':'3306',
            'DATABASENAME':'flask03',
        }
        
        # 数据库
        SQLALCHEMY_DATABASE_URI = get_database_uri(DATABASE)
        
    config = {
        'develop':DevelopConfig,    # 开发环境
        'testing':TestingConfig,    # 测试环境
        'staging':StagingConfig,    # 演示环境
        'product':ProductConfig,    # 线上环境
        'default':DevelopConfig,    # 默认开发环境
        
    }
    
    • init.py
    app.config.from_object(config.get(env_name or 'default')
    
    • models.py
    __tablename__ = '表名'
    

    相关文章

      网友评论

          本文标题:flask03

          本文链接:https://www.haomeiwen.com/subject/vflmzftx.html