Flask-Script:

Flask-Script的作用是可以通过命令行的形式来操作Flask。例如通过命令跑一个开发版本的服务器、设置数据库,定时任务等。要使用Flask-Script,可以通过pip install flask-script安装最新版本。首先看一个最简单的例子:

  1. # manage.py
  2. from flask_script import Manager
  3. from your_app import app
  4. manager = Manager(app)
  5. @manager.command
  6. def hello():
  7. print 'hello'
  8. if __name__ == '__main__':
  9. manager.run()

我们把脚本命令代码放在一个叫做manage.py文件中,然后在终端运行python manage.py hello命令,就可以看到输出hello了。

定义命令的三种方法:

  1. 使用@command装饰器:这种方法之前已经介绍过。就不过多讲解了。
  2. 使用类继承自Command类:

    1. from flask_script import Command,Manager
    2. from your_app import app
    3. manager = Manager(app)
    4. class Hello(Command):
    5. "prints hello world"
    6. def run(self):
    7. print "hello world"
    8. manager.add_command('hello',Hello())
  3. 使用类的方式,有三点需要注意:

    • 必须继承自Command基类。
    • 必须实现run方法。
    • 必须通过add_command方法添加命令。
  4. 使用option装饰器:如果想要在使用命令的时候还传递参数进去,那么使用@option装饰器更加的方便:

    1. @manager.option('-n','--name',dest='name')
    2. def hello(name):
    3. print 'hello ',name
  5. 这样,调用hello命令:

    1. python manage.py -n xt
  6. 或者

    1. python manage.py --name xt
  7. 就可以输出:

    1. hello xt

    添加参数到命令中:

  • option装饰器:以上三种创建命令的方式都可以添加参数,@option装饰器,已经介绍过了。看以下示例介绍展示添加多个参数的方式:

    1. @manager.option('-n', '--name', dest='name', default='joe')
    2. @manager.option('-u', '--url', dest='url', default=None)
    3. def hello(name, url):
    4. if url is None:
    5. print "hello", name
    6. else:
    7. print "hello", name, "from", url
  • command装饰器:command装饰器也可以添加参数,但是不能那么的灵活,如下示例:

    1. @manager.command
    2. def hello(name="Fred")
    3. print "hello", name
  • 类继承:类继承也可以添加参数,看以下示例:

    1. from flask_Flask import Comman,Manager,Option
    2. class Hello(Command):
    3. option_list = (
    4. Option('--name','-n',dest='name'),
    5. )
    6. def run(self,name):
    7. print "hello %s" % name
  • 如果要在指定参数的时候,动态的做一些事情,可以使用get_options方法,示例如下:

    1. class Hello(Command):
    2. def __init__(self,default_name='Joe'):
    3. self.default_name = default_name
    4. def get_options(self):
    5. return [
    6. Option('-n','--name',dest='name',default=self.default_name),
    7. ]
    8. def run(self,name):
    9. print 'hello',name