Flask的其他组件介绍
1 flask-script
Flask Script扩展提供 向Flask插入外部脚本的功能
,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任务;使得脚本和系统分开
Flask Script和Flask本身的工作方式类似,只需定义和添加从命令行中被Manager实例调用的命令
创建并运行命令
首先,创建一个Python模板运行命令脚本,可起名为manager.py
可以通过python manage.py
查看所有的命令
文件中,必须有一个Manager实例
,Manager类追踪所有在命令行中调用的命令和处理过程的调用运行情况
Manager只有一个参数——Flask实例,也可以是一个函数或其他的返回Flask实例
调用manager.run()启动Manager实例接收命令行中的命令
manage.py
#-*-coding:utf8-*-
from flask_script import Manager
from debug import app
manager = Manager(app)
if __name__ == '__main__':
manager.run()
命令行运行
python manage.py runserver 启动
python manage.py shell 进入shell
创建并加入命令
(1)创建Command子类
Command子类必须定义一个run
方法;
举例:创建Hello命令,并将Hello命令加入Manager实例;
manage.py
from flask_script import Manager
from flask_script import Command
from flask import Flask
app = Flask(__name__)
manager = Manager(app)
class Hello(Command):
def run(self):
print ('hello world')
manager.add_command('hello', Hello())
if __name__ == '__main__':
manager.run()
命令行
python script_flask.py hello
>> hello world
(2)使用Command子类的装饰器
这样就不用在写run方法,直接在运行的函数上面加上装饰器
manage.py
from flask_script import Manager
from flask import Flask
app = Flask(__name__)
manager = Manager(app)
@manager.command
def run():
print ('hello world')
if __name__ == '__main__':
manager.run()
命令行
python script_flask.py run
>> hello world
(3)使用Manager实例的@option修饰符
复杂情况下,建议使用@option
可以有多个@option选项参数;
manage.py
from flask_script import Manager
from flask import Flask
app = Flask(__name__)
manager = Manager(app)
@manager.option('-n','--name',dest='name',help='your name',default='world')
@manager.option('-u','--url',dest='url',help='url',default='www.baidu.com')
def run(name,url):
print(name,url)
这里的dest要与函数的参数一致
if __name__ == '__main__':
manager.run()
命令行
python manage.py run -u(或者- -url) xx.com -n(或者- -name)mmm
>> mmm xx.com
2 flask-migrate
在实际的开发环境中,经常会发生 数据库修改
的行为。在models中新加一行或几行column (比如用来保存账户的确认状态)
一般我们修改数据库不会直接手动的去修改,而是去修改ORM对应的模型,然后再把模型映射到数据库中。flask-migrate就是这样的一个工具
flask-migrate是基于Alembic进行的一个封装,并集成到Flask中,而所有的迁移操作其实都是Alembic做的,他能跟踪模型的变化,并将变化映射到数据库中
安装
Flask-Migrate
pip install flask-migrate
导入
使用flask-migrate必须使用flask-scripts这个模块MigrateCommand包中包含了所有和数据库相关的命令
manage.py
from app import create_app, db
from flask_script import Manager, Shell
from flask_migrate import Migrate, MigrateCommand
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
migrate = Migrate(app, db)
manager.add_command('db', MigrateCommand)
使用
三个命令
python manager.py db init 准备迁移环境
python manager.py db migrate 迁移
python manager.py db upgrade 提交
初始化:
python manage.py db init
这个命令会在项目下创建 migrations 文件夹,所有迁移脚本都存放其中。
创建第一个版本:
python manage.py db migrate -m "initial migration"
检查migrations\versions,会新建一个版本.py,检查里面表格及字段
运行升级:
python manage.py db upgrade
会把项目使用的数据库文件,更新为新的表格、字段,同时保留数据
后续更新
-
更新表格的字段 (models.py)
-
再次运行一下 db migrate -m -> 相当于commit 更新到/migrate目录
-
db upgrade -> 数据库会更新