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))
可能错误提示:
TypeError: <flask_script.commands.Shell object at 0x000000000478E908>: 'dict' object is not callable
是因为多写了括号, 让定义的 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()
简单说: 不用自己导入对象 (如数据库模型等)!
来源: https://www.cnblogs.com/liangmingshen/p/10119882.html