1.集成Python shell

每次自动shell会话都要导入数据库实例和模型,很烦人。
为了避免一直重复导入,
我们可以做些配置让Flask-Script的Shell命令自动导入特定的对象
若想把对象添加到导入列表中,我们要为shell命令注册一个make_context回调函数

例子:
hello.py: 为shell命令添加一个上下文

from flask_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 函数直接执行了

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'>

2.补充

(1)shell作用

 shell 是个好东西,在平时需要手动做一些应用的操作的时候,Flask 的 Shell 简直是神助攻,尤其是当需要查找一个 Model 的数据的时候更爽了。

Flask-Script 的 Shell 其实就是一个加载了 Flask 应用上下文的交互式环境,通过 shell, 我们可以像启动应用一样操作动态数据。

简单说:方便自己调试!

(2)make_context作用:

在启动的 shell 中添加默认的变量,例如上面添加了 db、User 这些,也就是说在启动 shell 之后就可以直接像访问默认函数/变量一样直接用,不用自己导入对象。

比如可以直接查询数据库:

db.User.query.all()

如果不加这个 make_context 参数的话,还得麻烦的自己导入:

from application.app import db
db.User.query.all()

简单说:不用自己导入对象(如数据库模型等)!

12-14 17:56