准备工作
1. Manager
# 1. 安装flask-script
pip install flask-script
# 使用里面的Manager进行命令得到管理和使用-app.py
'from flask_script import Manager'
from apps import create_app
app = create_app()
# pip install flask-script==2.0.3
'manager = Manager(app=app)' # 相当于把app包装一下
if __name__ == '__main__':
manager.run()
# 使用命令在终端
pip app.py runserver
pip app.py runserver -h 0.0.0.0 -p 8080
# 自定义添加命令-app.py:
@manager.command
def init():
print("初始化")
# 执行: python app.py init
2. 数据库
# 1. 安装第三方库文件
pip install pymysql # 保持持久化
pip install flask-sqlalchemy==3.0.3 # 实现ORM映射
pip install flask-migrate==2.7.0 # 发布命令工具
# 2. settings中配置数据库链接
# 配置文件
class Config: # 公共配置
DEBUG = True
# mysql + pymysql ://user:password@hostip:port/databasename
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:root@127.0.0.1:3306/flaskday05'
SQLALCHEMY_TRACK_MODIFICATIONS = False # 忽略警告
SQLALCHEMY_ECHO = True # 开发调试
class DevelopmentConfig(Config): # 开发环境
ENV = "development"
class ProductionConfig(Config): # 生产环境
ENV = 'production'
DEBUG = False
# 3. 创建ext包 ,编辑__init__.py
# 创建映射对象
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
# 4. 编辑apps/__init__.py,将db对象与app进行关联
from flask import Flask
import settings
from apps.user.view import user_bp
from exts import db
def create_app():
app = Flask(__name__, template_folder="../templates", static_folder="../static")
app.config.from_object(settings.DevelopmentConfig)
'db.init_app(app)' # 将db对象与app进行关联
# 注册蓝图
app.register_blueprint(user_bp)
return app
# 5. 编辑app.py 创建数据库的映射关系
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager
from apps import create_app
from exts import db
app = create_app()
# pip install flask-script==2.0.3
manager = Manager(app=app) # 相当于把app包装一下
# 命令工具
'migrate = Migrate(app=app, db=db)' # 影响数据库的映射关系
'manager.add_command('db', MigrateCommand)' # 将命令交给manaher处理
if __name__ == '__main__':
manager.run()
# 6. 在apps/user 创建models.py文件,创建模型类
# ORM 类 -->表
# 类对象 --> 表中的一条数据
from datetime import datetime
from exts import db
class User(db.Model):
# db.Column(类型,约束) 映射表中的列
# 数值类型,主键,自增
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
# 字符串类型, 不允许为空
username = db.Column(db.String(15), nullable=False)
password = db.Column(db.String(12), nullable=False)
# 字符串类型,唯一约束
phone = db.Column(db.String(11), unique=True)
# 日期时间,默认值:当前时间
email = db.Column(db.String(20))
radtetime = db.Column(db.DateTime, default=datetime.now)
def __str__(self):
return self.username
# 7. 使用命令:
a. 在app.py中导入模型: from apps.user.models import User #置灰不用,但需要导入
b. 在终端使用命令: db
python app.py db init # 产生一个文件夹 migrations,只需执行一次
python app.py db migrate # 迁移: 自动生成一个版本文件,在migrations/version生成一个.py文件
python app.py db upgrade # 同步: 生成数据库表
python app.py db downgrade # 降级: 数据库版本回退