Flask框架基础学习四

Flask框架基础学习四

Flask实现数据库版本控制

基本使用

  • 安装: pip install flask-migrate==2.7.0

    • 这边如果装最新的flask-migrate,会出现找不到MigrateCommand,所以尽量安装2.7.0版本的
  • 使用

    1. 编写模型类代码

      • from flask import Flask
        from flask_sqlalchemy import SQLAlchemy
        from flask_script import Manager
        from flask_migrate import Migrate, MigrateCommand
        
        
        class Config(object):
            SQLALCHEMY_DATABASE_URI = "mysql://root:123@127.0.0.1:3306/book?charset=utf8"
            # 这个值可以设置,也可以不设置,如果不设置,那么会一直报警告
            SQLALCHEMY_TRACK_MODIFICATIONS = False
            # 在flask-sqlalchemy 2.0之后就不在需要设置这一项了。
            SQLALCHEMY_COMMIT_ON_TEARDOWN = True
        
        
        app = Flask(__name__)
        app.config.from_object(Config)
        
        db = SQLAlchemy(app)
        manager = Manager(app)
        
        # 第一个参数是flask实例,第二个参数SQLAlchemy实例
        Migrate(app, db)
        
        # manager是Flask-Script的实例,这条语句在flask-Script中添加一个db命令
        manager.add_command("db", MigrateCommand)
        
        
        class Role(db.Model):
            __tablename__ = "roles"
            id = db.Column(db.Integer, primary_key=True)
            name = db.Column(db.String(128))
            title = db.Column(db.String(128))
            us = db.relationship("User", backref="role")
        
        
        class User(db.Model):
            __tablename__ = "users"
            id = db.Column(db.Integer, primary_key=True)
            name = db.Column(db.String(128))
            email = db.Column(db.String(128))
            password = db.Column(db.String(128))
            role_id = db.Column(db.Integer, db.ForeignKey("roles.id"))
        
        
        if __name__ == '__main__':
            manager.run()
        
        
    2. 创建迁移版本仓库

      • python main.py(py文件) db init
        
    3. 创建迁移版本

      • python main.py db migrate -m 'first_create'
        
    4. 更新到数据库

      • python main.py db upgrade
        

版本历史管理

# 第一次更新完之后,此时如果删除其中user表的password字段,需要再次创建迁移版本
python main.py db migrate -m 'delete_user_password'
python main.py db upgrade  # 更新到数据库

# 此时想回滚到初始版本
python main.py db history  # 查看历史版本号
# f81af0d810af -> 3eb45057b17f (head), delete_user_password
# <base> -> f81af0d810af, first_create

python main.py downgrade f81af0d810af  # 回滚到初始版本,不加版本号,默认返回上一个版本

实现Flask-session保存至redis

基本使用

  • 安装: pip install flask-Session

  • 使用

    1. 开启redis: redis-server --service-start

    2. from flask import Flask
      from flask_session import Session
      from flask import session
      
      import redis
      
      app = Flask(__name__, template_folder='templates')
      
      
      class Config(object):
          DEBUG = True
          SECRET_KEY = "**1234**Abcd*()!"
          # 把session保存到redis中
          # session存储方式为redis
          SESSION_TYPE = "redis"
          # 如果设置session的生命周期是否是会话期, 为True,则关闭浏览器session就失效
          SESSION_PERMANENT = True
          # 是否对发送到浏览器上session的cookie值进行加密
          SESSION_USE_SIGNER = True
          # 保存到redis的session的名称前缀
          SESSION_KEY_PREFIX = "session:"
          # session保存数据到redis时启用的链接对象
          SESSION_REDIS = redis.Redis(host='127.0.0.1', port=6379)  # 用于连接redis的配置
      
      
      app.config.from_object(Config)
      
      Session(app)
      
      
      @app.route("/set_session")
      def set_session():
          """设置session"""
          session["username"] = "bhlu"
          return "ok"
      
      
      if __name__ == '__main__':
          app.run()
      
      
    3. 查看

      • redis-cli  # 进入redis-cli客户端
        keys *  # 查看所有key
        # 1) "session:f883448c-b731-4865-88d0-9b87c8efb5db"
        

蓝图Blueprint

  • 目录结构

    • project
        ├─student
        │  ├─s_view.py  # 蓝图源文件
        └─manager.py  # 主文件
      
  • 使用

    • s_view.py

      • from flask import Blueprint  # 导入Blueprint模块
        
        # 实例化一个蓝图对象
        stu_blue = Blueprint(
            'stu',  # 定义名称
            __name__,
            template_folder='stu_template',  # 模板位置
            static_folder='stu_static'  # 静态文件位置
        )
        
        
        # 这里添加路由,可以将stu_blue想象成app
        @stu_blue.route('/')
        def index():
            return 'i am stu_blue'
        
    • manager.py

      • from flask import Flask
        
        from student import s_view
        
        app = Flask(__name__)
        
        # 将蓝图对象注册到Flask对象中
        app.register_blueprint(s_view.stu_blue)
        
        if __name__ == '__main__':
            app.run(debug=True)
        
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值