有多个script怎么放一起_Flask干货:访问数据库——Flask-Script工具的使用

5f9f47d8bb0bc4c62feb17a99334d6cc.png

Flask的Web开发服务器支持很多启动设置选项,但只能在脚本中作为参数传给app.run()函数。

这种方式很不方便,传递设置选项的理想方式是使用命令行参数

Flask-Script就是这么一个Flask扩展工具,为Flask程序添加一个命令行解析器。

简单地说,Flask-Script的作用就是可以通过命令行的形式来操作Flask。如,通过命令行跑一个开发版本的服务器、设置数据库等。

接下来,我们就认识一下Flask-Script。

一、安装Flask-Script并初始化

用pip可以实现安装:

pip install flask-script

如果要在虚拟环境下运行,那么需要在虚拟环境中安装。安装失败的小伙伴可以尝试清华镜像安装:

pip install –i https://pypi.tuna.tsinghua.edu.cn/simple flask-script

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

from flask_script import Manager
from flask import Flask
 
app = Flask(__name__)
manager = Manager(app)
 
if __name__ == "__main__":
 manager.run()

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

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

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

二、Command子类创建命令

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

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

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

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

下方的“runserver”是运行服务器方法,执行时电脑将变为服务器,但并不会运行所有程序。

现在需要打开命令行工具,并切换到虚拟环境下的manager.py文件所在目录(如作者的文件存放在“E:FlaskFile”下),输入:

python manager.py hello

我们将看到如下结果:

75150628d9adc01e01ae977ff696cae3.png

观察可以发现,当调用“hello”方法时整个Hello()类都完成运行,包括内部方法

如果我们只运行服务器,内部方法就不执行:

python manager.py runserver

8f681794b674cdecda6025ccdb3cfdf5.png

结果中只打印出“Hello”,因此没有继续执行内部函数。

在此之前的创建服务器操作其实也是调用了Server()类,只是这里将它换了个名字。

三、使用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实例的@command修饰符方法来创建命令和Command类创建命令的效果是相同的:

b249e5f4c27b038b7fa1658fd341cd40.png

四、使用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()

="mailto:%E4%B8%8A%E9%9D%A2%E7%9A%84%E4%BB%A3%E7%A0%81%E4%B8%AD%E7%94%A8@manager.option()">上面的代码中用@manager.option()方法将变量和函数联系起来,前两个参数指定了变量在命令行中的变量名,dest将变量关联到hello()函数,default指定默认值,避免调用时报错。

在命令行输入:

python manager.py hello --name No5Programmer

运行结果如下:

cde2f69d294dbd18126443f0147f585e.png

如果传入两个参数:

python manager.py hello -n No5Programmer –u www.google.com

运行结果如下:

d24b63e8fb274fc73215e7d3572f732b.png

Flask-Script工具就介绍到这里,它的作用比较单一,就是实现用命令行操作Flask,在特定情况下具有重要意义。

除此之外,细心的小伙伴可能也发现了,“-n”、“-u”是不是有似曾相识的感觉?

其实命令行的参数传入就是用“-”表示的,比如一开始安装Flask-Script工具时用到的“-i”,实质是在指定下载地址。

关于Flask-Script就说这么多,下一次我们将说说Flask循环引用,感兴趣的小伙伴可以持续关注!

你确定不关注我一波?

40a814b9c57c877d846f8ee26de13d45.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值