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来同步数据库。