Flask-script简单使用

flask-script 是一个flask包,通常情况下,我们是这么运行一个flask项目的:

from blog import create_app

app = create_app()

if __name__ == '__main__':
    print(app.url_map)
    app.run()

运行命令:python manage.py(我这里将app.py改成了manage.py )

现在我们使用flask-script:

from blog import create_app
from flask_script import Manager

app = create_app()
manager = Manager(app)
if __name__ == '__main__':
    print(app.url_map)
    manager.run()

然后运行命令:

python manage.py runserver.访问网页也正常了,但是从这样看,这个flask-script好像没什么用吧。

现在我们做点改变:

from blog import create_app
from flask_script import Manager

app = create_app()
manager = Manager(app)

@manager.command
def custom(arg):
    print(arg)


if __name__ == '__main__':
    print(app.url_map)
    # app.run()
    manager.run()

运行命令:python manage.py custom 'hello'

^C(fla) root@Andy963:/mnt/d/code/blog# python manage.py custom 'hello'
Map([<Rule '/home' (HEAD, OPTIONS, GET) -> blog.home>,
 <Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>])
hello

在自定义函数中的操作也被执行了,可以看到flask-script让我们得以执行自定义脚本

更进一步的操作还可以是这样:

@manager.option('-n', '--name', dest='name')
@manager.option('-u', '--url', dest='url')
def cmd(name, url):
    """
    自定义命令
    执行: python manage.py  cmd -n andy -u http://www.oldboyedu.com
    :param name:
    :param url:
    :return:
    """
    print(name, url)

if __name__ == '__main__':
    manager.run()

这种情况下,我们必须传入参数-n -u, -n后面的参数被传给name, -u则传给url

就目前来看,我们flask-script帮助我们执行一些自定义的操作。因为flask中没有同步数据库的组件,所以我们需要借助第三方的组件,如果需要同步数据库,我们需要flask-migrate/flask-sqlalchemy 与flask-script组合起来使用,然后即可执行命令python manage.py migrate来同步数据库。

上一篇:Flask源码之偏函数与LocalProxy

下一篇:Flask信号