Flask-Scropt插件为在Flask里编写额外的脚本提供了支持。这包括运行一个开发服务器,一个定制的Python命令行,用于执行初始化数据库、定时任务和其他属于web应用之外的命令行任务的脚本。
1、安装
使用pip来安装:
pip install Flask-Script
2、示例代码
示例代码如下:
from flask_script import Manager,Command
from flask import Flask
app = Flask(__name__)
manager = Manager(app)
class hello(Command):
"prints hello world"
def run(self):
print("hello world")
manager.add_command('hello', hello())
if __name__ == "__main__":
manager.run()
3、代码说明
1). 创建实例
manager = Manager(app): 先创建一个Manager实例。Manager类会跟踪所有的命令和命令行调用的参数。
2)运行命令
manager.run(): 方法初始化Manager实例来接收命令行输入。
3)创建自定义命名
创建自定义命令有三种方法:
- 定义Command类的子类
from flask_script import Command
class Hello(Command):
"prints hello world"
def run(self):
print "hello world"
#将命令添加到Manager实例:
manager.add_command('hello', Hello())
- 使用@command装饰器
@manager.command
def hello():
"Just say hello"
print("hello")
- 使用@option装饰器
from flask_script import Manager
from debug import app
manager = Manager(app)
@manager.option('-n', '--name', dest='name', help='Your name', default='world')
#命令既可以用-n,也可以用--name,dest="name"用户输入的命令的名字作为参数传给了函数中的name
@manager.option('-u', '--url', dest='url', default='www.csdn.com') #命令既可以用-u,也可以用--url,dest="url"用户输入的命令的url作为参数传给了函数中的url
def hello(name, url):
'hello world or hello <setting name>'
print 'hello', name
print url
if __name__ == '__main__':
manager.run()
5). 使用
在命令行运行如下命令:
- 普通使用
$python manage.py hello
hello world
- 针对使用@option装饰器的:
python manager.py hello -n sissiy -u www.sissiy.com
hello sissiy
www.sissiy.com
6). 使用shell添加上下文
每次启动shell会话都要导入数据库实例和模型,这真是份枯燥的工作。为了避免一直重复导入,我们可以做些配置,让Flask-Script的shell命令自动导入特定的对象。
若想把对象添加到导入列表中,我们要为shell命令注册一个make_context回调函数。
from flask.ext.script import Shell
def make_shell_context():
return dict(app=app, db=db, User=User, Role=Role)
manager.add_command("shell", Shell(make_context=make_shell_context))
make_shell_context()函数注册了程序、数据库实例以及模型,因此这些对象能直接导入shell:
$ python hello.py shell
>>> app
<Flask 'app'>
>>> db
<SQLAlchemy engine='sqlite:////home/flask/flasky/data.sqlite'>
>>> User
<class 'app.User'>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。