Fork me on GitHub

Flask学习笔记(十一)-Flask-script使用详解

一、定义

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 不安全

 运行结果:

 备注:

1、当函数有需要传参时,最好用@manager.opation

2、当函数没有参数时,最好用@manager.command

posted @ 2022-10-10 00:08  橘子偏爱橙子  阅读(812)  评论(0编辑  收藏  举报