Flask Web 开发 Flask script 扩展功能 Manager
本文是从****找到的,觉得挺棒,分享一下,顺便自己保存
网上看了一下其他前辈的文章,自己再记录下
然后是通过这篇文章看了以后自己做的记录
http://my.oschina.net/lijsf/blog/158828
好,先简单讲讲扩展吧,他是向flask导入外部脚本来运行
而里面这个Manager说简单些,就是在python xxxxx.py 这个语句后面可以加入添加语句进行运行
类似于python m1.py hello
我们来看下面这个例子
首先创建一个app实例
创建Manager的实例manager,参数是app实例
然后通过装饰器manager.command,添加一个命令,而添加的命令,就是下面函数的名字!!!
我们做了如下实验
1:运行此程序,但是后面不带扩展命令
2:运行此程序,后面带扩展命令
我们可以看到由于程序运行是通过manager.run()来实现的,当不带扩展命令的时候,他会提示你目前可以提供的扩展命令有几个
runserver和shell是默认的
hello是我们添加的,就是函数的名字
运行完以后就能打印出not always hello这句话了
然后下面讲到创建命令,可以有3种方式
•创建Command的子类
•使用 @command 修饰符
•使用 @option 修饰符
先讲第一种
他相当于用add_command方法,把你自定义的命令名字(这里是hello),和你Hello()实例的run方法绑定了,这是我自己的理解
或者,你可以直接在manager.run()里面进行强行添加数据,我觉得这个有点硬编码的感觉..............
接着,讲一下命令后面可以跟的附属命令
比如python m1.py hello -?
这个 -? 会获取hello命令的docstring以及相关信息
这里注意,上面转载的文章里面,写错了,他写-h是获取帮助信息,其实是 -?
最后一种方法,是用option功能来进行精细控制
而option的参数可以如下:
在Hello这个子类里面,需要调用option_list属性,并用Option来赋值,具体如下
然后就可以用hello 命令后面附加命令来实现变量了
接下来的使用get_option方法。。完全不明白作用在哪里,就记录下吧
另外直接如果函数里面有变量的话,用@command可以直接实现功能
并且我们找到了一些规律
比如当你用 --name allen的时候,他取到的变量是allen
当你用 -n allen的时候,他取到是allen
-name的时候,取到的是ame ,注意n和a之间没有空格
--name 的话,跟的就是空格后面的变量
其实,你把变量名字改成same,或者dame,任意的,都可以
如果改成same,那么他的附加方法变成-s和--same
dame的话,变成-d和-dame
另外一个碰到的情况是参数内容是布尔值
如下:
但是当变量是布尔值的时候,附加命令只能用如下图中的-b 或者--boolvalue
不过,当参数过多时候,我们觉得还是用option来的方便些,如下编写
option里参数的作用,相当于是将 -n和--name这2个附加命令绑定到name变量上
实际上,你如果把dest='test',而hello(test)这个函数的变量也变成test,一样奏效
当你遇到有2个参数的情况,用option装饰器的情况就会方便多了
如下代码