flask-script

Flask-Script

  • flask-script的作用是可以通过命令行的形式来操作Flask.例如通过命令跑一个开发的服务器、设置数据库等。

命令的添加方式

1 .使用manage.command: 这个方法是用来添加那些不需要传递参数的命令的。
2 .使用manage.option: 这个方法是用来添加那些需要传递参数的命令的。有几个参数就需要些使用几个参数器。
3 .如果有一些命令是针对某一功能的,可以加这些命令放在同一个模块里

安装Flask-Script并初始化

用pip可以实现安装:

pip install flask-script

安装完成后,新建manager.py文件并输入下列代码初始化:


from flask import Flask

app = Flask(__name__)

"""使用flask-script启动项目"""
from flask_script import Manager
manager = Manager(app)

@app.route('/')
def index():
    return 'hello world'

if  __name__ == "__main__"
    manager.run()

可以看出,代码中包含一个Manager实例,是执行代码的必须项,其作用是追踪所有在命令行中调用的命令和处理过程的调用和运行情况。

Manager实例化只有一个参数——Flask实例,无论是导入还是生成,创建Manager实例时都需要用到Flask对象。

当调用manager.run()时,就启动了Manager实例接收命令行中的命令。

Command子类创建命令

要想让Manager知道哪些方法归它管,需要用特定的方法判定归属。

定义一个子类继承自Command类,然后在manager.add_command()方法中可以将这个类定义成一些命令。修改manager.py代码:

"""自定义flask_script终端命令"""
from flask_script import Command
class HelloCommand(Command):
    """命令的相关描述"""
    def run(self):
        with open("text.txt", "w") as f:
            f.write("hello\r\nhello")
            pass
        print("这是执行了hello命令")

manage.add_command('hello', HelloCommand())

上面的代码中定义了一个子类HelloCommand(),HelloCommand()类继承了Command父类,因此可以用manager.add_command()方法将HelloCommand()类定义成命令“hello”

使用Command实例的@command修饰符

href="mailto:%E4%BD%BF%E7%94%A8@manager.command">使用@manager.command修饰一个定义好的函数,就相当于给此函数添加了一个命令,此命令的名称就是函数的名称。修改manager.py代码如下:

from flask_script import Manager,Server,Command
from flask import Flask
 
app = Flask(__name__)
manager = Manager(app)
 
@manager.command
def hello():
 print("Hello world!")
 
if __name__ == "__main__":
 manager.run()

使用Command实例的@option修饰符创建命令

前面的例子中,函数都没有设置参数,那如果要传入参数怎么办呢?

@option修饰符就能实现多个参数项传入,继续修改manager.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',default='www.csdn.com')
def hello(name, url):
 print("Hello",name)
 print(url)
 
if __name__ == "__main__":
 manager.run()

参考:https://zhuanlan.zhihu.com/p/269820011

posted @ 2021-09-26 15:08  fat_girl_spring  阅读(35)  评论(0编辑  收藏  举报