Shell 是个好东西 。平时需要手动做一些应用的操作的时候,Flask 的 Shell 简直是神助攻,尤其是当需要查找一个 Model 的数据的时候更爽了,看题主好像挺疑惑,那我就稍作解释一下:
首先,什么是 Flask-Script 的 Shell,Flask-Script 的 Shell 其实就是一个加载了 Flask 应用上下文的交互式环境,通过 shell, 我们可以像启动应用一样操作动态数据。
-
make_context
这个参数的作用就是在启动的 shell 中添加默认的变量,例如你上面添加了 db、User 这些,也就是说在你启动 shell 之后就可以直接像访问默认函数/变量一样直接什么都不用 import 就可以这样用:
db.User.query.all()
如果不加这个 make_context
参数的话,需要这样做:
from application.app import db
db.User.query.all()
所以它的作用并不是只创建了一个应用上下文。
-
这里的通过Shell类,给manager添加的命令shell,和原来manager里面的shell是否是一样的,正如第 1 个提到的一样,这里只是增加了一些参数。
但是,原来manager里面的shell内容却不是空的,默认是有一个 app 的,因为如果你不自己加 make_context
的话,默认的代码是加了一个 app
,见源码:链接描述(line: 251)
shell这样的应用上下文,可以理解为:为shell里面赋予一些数据,比如变量啊,或者数据库信息啊什么的,以提供给前面的shell来使用?