一、定义
flask-script是一个支持自定义命令的工具,为Flask程序添加了一个命令行解析器,可以让程序从命令行直接执行相应的程序。
flask-script支持在Flask中编写外部脚本,这包括运行开发服务器、定制python-shell、设置数据库的脚本、cronjobs和其他属于web应用程序本身之外的命令行任务。
二、安装flask_script
pip install Flask-Script
三、使用案例
1、简单使用
将flask-script继承在Flask项目manager.py中,其代码如下所示:
from flask import Flask from flask_script import Manager #导入Manager方法 app = Flask(__name__) manager = Manager(app) # 将命令行绑定在app应用中 @app.route('/') def index(): return 'hello world' if __name__ == "__main__" manager.run()
由于我们通过Manager()方法将命令行绑定在app应用中,所以需要命令行执行下面代码来启动flask程序:
python manager.py runserver
运行结果如下:
在app.py runserver后面可以接以下命令:
[-?] [-h HOST] [-p PORT] [--threaded] [--processes PROCESSES] [--passthrough-errors] [-d] [-D] [-r] [-R] [--ssl-crt SSL_CRT] [--ssl-key SSL_KEY]
举个简单的例子,修改flask服务的端口号,命令行执行代码如下所示:
python manager.py runserver -p 8080
运行结果如下:
2、装饰器@manager.command
在刚才的基础上,添加可以输出的函数,并在命令行输出,需要调用装饰器@manager.command
,无法传参。
from flask import Flask from flask_script import Manager #导入Manager方法 app = Flask(__name__) manager = Manager(app) # 将命令行绑定在app应用中 @app.route('/') def index(): return 'hello world' @manager.command def welcome(): #自定义flask-script print('welcome') # 用manager.command方法,可以自定义旗下的函数, # 后面跟参数,每个参数加空格即可 # 这样在命令行就可以执行该函数 @manager.command def xf_say(arg, num): print(arg * int(num)) @manager.option("-n", "--name", dest="name") @manager.option("-a", "--adj", dest="adj") def xftest(name, adj): print(name + "你真的很" + adj) if __name__ == "__main__": manager.run()
命令行:
python manager.py xf_say "fuck you" 2
- 这里分别给函数<xf_say>传了两个参数,
"fuck you" 和2
- 运行结果
fuck youfuck you
3、装饰器@manager.opation
用opation装饰器看一看有什么不同(示例同上@manager.option)
- 在这里,option传递了两种参数:
manager.option("-短指令","--长指令",dest="参数名")
命令行:
python manager.py xftest -n 小风 -a 帅 python manager.py xftest --name 波音737MAX --adj 不安全
运行结果:
![](/i/l/?n=22&i=blog/1199356/202210/1199356-20221010000543074-1055930294.png)
备注:
1、当函数有需要传参时,最好用@manager.opation
:
2、当函数没有参数时,最好用@manager.command
。