Flask之Flask-Script 扩展
这个模块的作用可以让我们通过终端来控制flask项目的运行
安装命令:
pip install flask-script -i https://pypi.douban.com/simple
Manager
集成 Flask-Script到flask应用中,创建一个主应用程序,一般我们叫manage.py/run.py/main.py
都行。
from flask import Flas
from flask_script import Manager
app = Flask(__name__)
"""使用flask_script启动项目"""
manage = Manager(app)
@app.route('/')
def index():
return 'hello world'
if __name__ == "__main__":
manager.run()
启动终端脚本的命令:
# 端口和域名不写,默认为127.0.0.1:5000
python run.py runserver
# 通过-h设置启动域名,-p设置启动端口 -d
python run.py runserver -h127.0.0.1 -p8888 # 关闭debug模式
python run.py runserver -h127.0.0.1 -p8888 -d # 开启debug模式
自定义终端命令
Flask-Script 还可以为当前应用程序添加脚本命令
- 引入Command命令基类
- 创建命令类必须直接或间接继承Command,并在内部实现run方法或者
__call__()
方法,
同时如果有自定义的其他参数,则必须实现get_options或者option_list - 使用flask_script应用对象manage.add_command对命令类进行注册,并设置调用终端别名。
from flask import Flask
from flask_script import Manager,Command,Option
app = Flask(__name__)
"""使用flask_script启动项目"""
manage = Manager(app)
"""自定义终端命令"""
class PrintCommand(Command):
"""命令的相关描述: 打印数据"""
def get_options(self):
options = (
Option('-h', '--host', dest='host', default="127.0.0.1"),
Option('-q', '--quit', dest='quit', default="退出",type=str),
Option('-p', '--port', dest='port', type=int, default="7000"),
)
return options
# 也可以使用option_list来替代get_options
# option_list = (
# Option('-h', '--host', dest='host', default="127.0.0.1"),
# Option('-q', '--quit', dest='quit', default="退出",type=str),
# Option('-p', '--port', dest='port', type=int, default="7000"),
# )
def run(self,host,port,quit): # 没有app对象
print("测试命令")
print(f"self.host={host}")
print(f"self.port={port}")
print(f"self.quit={quit}")
# def __call__(self, app, *args, **kwargs): # 会自动传递当前flask实例对象进来
# print("测试命令")
# print(app)
manage.add_command("print", PrintCommand)
@app.route("/")
def index():
return "ok"
if __name__ == '__main__':
manage.run()
运行文件得到提示print相关解释:
运行加print
触发里面的相关方法:
练习:
1. 使用终端命令则可以在当前目录下创建以下目录和文件
home/
|- vies.py
|- models.py
|- urls.py
|- test.py
|- __init__.py
import os
from flask import Flask
from flask_script import Manager, Command, Option
app = Flask(__name__)
manage = Manager(app)
class Create(Command):
"""创建文件"""
option_list = (
Option("-n", "--name", dest="name", type=str),
)
def run(self, name):
nod_list = ['vies.py', 'models.py', 'urls.py', 'test.py', '__init__.py'] # 文件列表
path = os.getcwd() # 获取当前工作目录
os.chdir(path) # 切换到当前工作目录
if os.path.exists(name): # 判断文件是否存在
print('当前文件已存在')
return
os.makedirs(name) # 创建文件夹
new_path = os.path.join(os.getcwd(), name) # 拼接路径
os.chdir(new_path) # 切换工作目录
for nod in nod_list:
# os.mknod(nod) # 创建文件(windows下os模块没有mknod方法,可以使用open打开文件的方法)
# open(nod, 'w')
with open(nod, 'w') as f:
pass
manage.add_command("create", Create)
if __name__ == '__main__':
manage.run()
# python run.py create -n[你要创建的文件夹名称]