python flask框架学习(三):flask_script
2018-09-30 本文已影响0人
cooqes
1. manager的作用:可以在终端使用指令来操作程序
2. @manager.option的作用:可以在终端使用指令传参
3. Flask-Migrate是一个为Flask应用处理SQLAlchemy数据库迁移的扩展,使得可以通过Flask的命令行接口或者Flask-Scripts对数据库进行操作。
manager.py
#1. 导入Manager
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from main import create_app
from db import db
from apps.cms import models
CMSUser = cms_models.CMSUser
app = create_app()
#2. 创建Manager对象,传入flask app作为参数
manager = Manager(app)
#
Migrate(app, db)
#添加'db'命令
manager.add_command('db', MigrateCommand)
#2. 通过命令行传参赋值给对应的变量,例如命令行添加-u abc,相当于username=abc
@manager.option('-u', '--username', dest='username')
@manager.option('-p', '--password', dest='password')
@manager.option('-e', '--email', dest='email')
def create_cms_user(username, password, email):
user = CMSUser(username=username, password=password, email=email)
db.session.add(user)
db.session.commit()
print('add user model success')
if __name__ == '__main__':
manager.run()
# 命令行脚本
$ python manage.py db init 初始化数据库,会创建一个migations文件夹,并且会在数据库中生成一个alembic_version表
$ python manage.py db migrate 创建迁移历史
$ python manage.py db upgrade 更新数据库
# 插入一条数据
$ python manage.py create_cms_user -u cooqes -p 111111 -e cooqes@cooqes.com
db.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
main.py
from flask import Flask
from apps import *
import config
from db import db
def create_app():
_app = Flask(__name__)
_app.config.from_object(config)
_app.register_blueprint(cms_bp)
_app.register_blueprint(common_bp)
_app.register_blueprint(front_bp)
#初始化db配置
db.init_app(_app)
return _app
if __name__ == '__main__':
app = create_app()
app.run()
apps/cms/models.py
from datetime import datetime
from db import db
class CMSUser(db.Model):
__tablename__ = 'cms_user'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(50), nullable=False)
password = db.Column(db.String(100), nullable=False)
email = db.Column(db.String(50), nullable=False, unique=True)
join_time = db.Column(db.DateTime, default=datetime.now)