Flask-Script扩展包提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任务;使得脚本和系统分开;
使用Flask-Script扩展包前,需要使用下面命令进行安装
pip install Flask-Script
Flask-Script工作方式和Flask本身类似,只需定义和添加从命令行中被Manager实例调用的命令;
官方文档:http://flask-script.readthedocs.io/en/latest/
一、基本运用
首先,创建一个Python模板运行命令脚本,可起名为manager.py;
在该文件中,必须有一个Manager实例,Manager类追踪所有在命令行中调用的命令和处理过程的调用运行情况;
Manager只有一个参数——Flask实例,也可以是一个函数或其他的返回Flask实例;
调用manager.run()启动Manager实例接收命令行中的命令;
from flask import Flask
from flask_script import Manager # 启动命令的管理类
app = Flask(__name__)
# 创建Manager管理类的对象
manager = Manager(app)
@app.route("/index/")
def index():
return "hello flask"
if __name__ == '__main__':
# 通过管理对象来启动flask
manager.run()
创建好manager.py文件后,不能直接通过启动文件来运行,需要在系统的命令行中通过命令启动。
上图中通过 runserver 命令启动了服务
上图中通过shell命令,进入了flask的交互模式。
我们可以通过 --help查看其它可用命令
并且可以通过 命令+ --help查看每个命令的可用参数
二、自定义命令
除了 runserver和shell命令,我们还可以创建自定义命令,有三种创建命令的方法:
- 创建Command子类
- 使用 Manager 实例的@command修饰符
- 使用 Manager 实例的@option修饰符
2.1 创建Command子类
Command子类必须定义一个run方法
举例:创建Hello命令,并将Hello命令加入Manager实例;
from flask import Flask
from flask_script import Manager # 启动命令的管理类
from flask_script import Command
app = Flask(__name__)
# 创建Manager管理类的对象
manager = Manager(app)
# 1.创建Command子类,并且必须定义一个run方法
class Hello(Command):
def run(self):
print("hello flask")
# 自定义命令
manager.add_command("hello", Hello()) # hello为命令行的启动命令,Hello()为命令调用的类
if __name__ == '__main__':
# 通过管理对象来启动flask
manager.run()
运行自定义命令
自定义命令也可以通过 --help查看
2.2 使用 Manager 实例的@command修饰符
from flask import Flask
from flask_script import Manager # 启动命令的管理类
app = Flask(__name__)
# 创建Manager管理类的对象
manager = Manager(app)
# 2.使用Command实例的@command修饰符
@manager.command
def hi():
print("hi flask")
if __name__ == '__main__':
# 通过管理对象来启动flask
manager.run()
2.3 使用 Manager 实例的@option修饰符
from flask import Flask
from flask_script import Manager # 启动命令的管理类
app = Flask(__name__)
# 创建Manager管理类的对象
manager = Manager(app)
# 3.使用 Manager 实例的@option修饰符
@manager.option('-n', '--name', dest='name', help='Your name', default='zhangsan')
# 解释:
# -n:参数的简写
# --name:参数全称
# dest="name":用户在参数后的输入值传递给函数中的name
# help='Your name':使用--help查看时的参数解释
# default='zhangsan':用户不使用参数时的默认值
@manager.option('-a', '--age', dest='age', help='Your age', default='18')
def say(name, age):
print(F"{name}:{age}")
if __name__ == '__main__':
# 通过管理对象来启动flask
manager.run()
附码:
from flask import Flask
from flask_script import Manager # 启动命令的管理类
from flask_script import Command
app = Flask(__name__)
# 创建Manager管理类的对象
manager = Manager(app)
# 自定义命令一共3中方法
# 1.创建Command子类,并且必须定义一个run方法
class Hello(Command):
def run(self):
print("hello flask")
# 自定义命令
manager.add_command("hello", Hello()) # hello为命令行的启动命令,Hello()为命令调用的类
# 2.使用 Manager 实例的@command修饰符
@manager.command
def hi():
print("hi flask")
# 3.使用 Manager 实例的@option修饰符
@manager.option('-n', '--name', dest='name', help='Your name', default='zhangsan')
# 解释:
# -n:参数的简写
# --name:参数全称
# dest="name":用户在参数后的输入值传递给函数中的name
# help='Your name':使用--help查看时的参数解释
# default='zhangsan':用户不使用参数时的默认值
@manager.option('-a', '--age', dest='age', help='Your age', default='18')
def say(name, age):
print(F"{name}:{age}")
if __name__ == '__main__':
# 通过管理对象来启动flask
manager.run()