Flask_script扩展调用的方式

Flask中flask-script扩展的使用

经过使用Flask-Script扩展,咱们能够在Flask服务器启动的时候,经过命令行的方式传入参数。而不单单经过app.run()方法中传参python

Flask-Script扩展提供向Flask插入外部脚本的功能。包括运行一个开发用的服务器,一个定制的 Python shell,设置数据库的脚本, 以及其余的运行在web应用以外的命令行任务。nginx

Flask-Script和Flask自己的工做方式相似。只须要定义和添加能从命令行中被Manager实例调用的 命令便可。web


from flask import Flask
from flask_script import Manager app = Flask(__name__) manager = Manager(app)
@manager.command def hello(): print "hello" if __name__ == "__main__": manager.run()

只要像上面同样定义你本身的命令脚本,就能够在命令行中以下调用他们:sql

 python 文件名.py  函数名shell

python manage.py hello > hello 

 

安装Flask-Script

pip install Flask-Script

 

Manager只有一个参数:一个Flask实例。数据库

其次,建立而且加入命令。有三种方法可建立命令:flask

  • 建立Command的子类
  • 使用 @command 修饰符
  • 使用 @option 修饰符

下面是一个简单的例子,建立一个Hello命令,该命令只是简单的输出“hello word”。ruby

from flask.script import Command class Hello(Command):  def run(self): print "hello world" 

再把上面建立的Hello命令加入Manager实例:bash

manager.add_command('hello', Hello()) 

如今执行下面的命令:服务器

python manage.py hello > hello world 
 

第一种方法是最适用的,但也是最麻烦的。对于简单的命令,只须要使用Command实例的@command修饰符。

@manager.command def hello():  print "hello" 

这种方法建立的命令的运行方式和Command类建立的运行方式是相同的。

第三种方式@option修饰符适用于更精细的命令行控制:python manage.py hello > hello

@manager.option('-n', '--name', help='Your name') def hello(name): print "hello", name 

增长命令行参数

大多数命令都带有参数。仍是上面的例子,若是不单单是打印"hello world",还想输出一个额外的名字,如:

python manage.py hello --name=Joe hello Joe 
 

为实现这一功能,须要使用Command类的option_list属性。

from flask_script import Command, Manager, Option class Hello(Command): option_list = ( Option('--name', '-n', dest='name'), ) def run(self, name): print "hello %s" % name 

 

另外一种方法是为你的Command类定义一个get_options方法,这将在但愿依赖运行实例返回值来获得参数时很是有效。

class Hello(Command): def __init__(self, default_name='Joe'): self.default_name=default_name def get_options(self): return [ Option('-n', '--name', dest='name', default=self.default_name), ] def run(self, name): print "hello", name 

若使用@command修饰符,参数将直接自动的从函数的参数中获取:

@manager.command def hello(name): print "hello", name > python manage.py hello Joe hello Joe

调用方法以下:

> python manage.py hello --name=Joe hello Joe 

或者:

> python manage.py hello -n Joe hello Joe 

 

-n 是由参数的第一个字母决定的。因此"name" > "-n"

其次,-h选项一般输出命令的帮助文档,因此避免使用h开头的参数。

 

@command修饰符随便简单好用,但在复杂状况下,@option是更好的选择:

@manager.option('-n', '--name', dest='name', default='joe') def hello(name): print "hello", name 

能够增长更多的选项参数:

@manager.option('-n', '--name', dest='name', default='joe') @manager.option('-u', '--url', dest='url', default=None) def hello(name, url): if url is None: print "hello", name else: print "hello", name, "from", url 

能够这样调用:

> python manage.py hello --name=Joe --url=reddit.com   hello Joe from reddit.com
相关文章
相关标签/搜索