Flask框架基础学习四
Flask实现数据库版本控制
基本使用
-
安装:
pip install flask-migrate==2.7.0
- 这边如果装最新的flask-migrate,会出现找不到MigrateCommand,所以尽量安装2.7.0版本的
-
使用
-
编写模型类代码
-
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()
-
-
创建迁移版本仓库
-
python main.py(py文件) db init
-
-
创建迁移版本
-
python main.py db migrate -m 'first_create'
-
-
更新到数据库
-
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
-
使用
-
开启redis:
redis-server --service-start
-
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()
-
查看
-
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)
-
-