css - Flask script 内的Shell 类 使用

 溪边莎草 发布于 2022-10-27 21:17

最近在看Flask web 开发这本书,里面看到集成shell这一环节,甚是不理解,想问几个问题

1:下面的Shell类,里面的make_context这个变量,起到的是什么作用呢?是否是起到创建一个应用上下文的作用?

2: 这里的通过Shell类,给manager添加的命令shell,和原来manager里面的shell是否是一样的呢?是不是原来manager里面的shell内容是空的?这里通过Shell类给他赋予了内容?

3: shell这样的应用上下文,我可以不可以理解为:为shell里面赋予一些数据,比如变量啊,或者数据库信息啊什么的,以提供给前面的hello.py来使用?

集成Python shell
每次启动shell 会话都要导入数据库实例和模型,这真是份枯燥的工作。为了避免一直重复
导入,我们可以做些配置,让Flask-Script 的shell 命令自动导入特定的对象。
若想把对象添加到导入列表中,我们要为shell 命令注册一个make_context 回调函数,如
示例5-7 所示。
示例5-7 hello.py:为shell 命令添加一个上下文

from flask.ext.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() 函数注册了程序、数据库实例以及模型,因此这些对象能直接导入shell:

$ python hello.py shell
>>> app

>>> db

>>> User
2 个回答
  • 1.初始化Shell类可能可以传入多个参数,不传入就为默认。代码那样写就是说指定将make_shell_context这个变量传给make_context这个参数
    2.不懂。
    3.这样来看很像是在方便自己调试,没有方便hello.py的使用,说白了就是不用自己导入一些要查看的对象。
    4.和css有毛关系。

    回到家看看源代码再作补充

    2022-10-29 04:33 回答
  • 首先必须要说下这个 shell 是个好东西啊,在平时需要手动做一些应用的操作的时候,Flask 的 Shell 简直是神助攻,尤其是当需要查找一个 Model 的数据的时候更爽了,看题主好像挺疑惑,那我就稍作解释一下:

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

    1. make_context 这个参数的作用就是在启动的 shell 中添加默认的变量,例如你上面添加了 db、User 这些,也就是说在你启动 shell 之后就可以直接像访问默认函数/变量一样直接什么都不用 import 就可以这样用:

    db.User.query.all()

    如果你不加这个 make_context 参数的话,你需要这样做:

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

    所以它的作用并不像题主理解的那样创建了一个应用上下文。

    1. 这里的通过Shell类,给manager添加的命令shell,和原来manager里面的shell是否是一样的,正如第 1 个提到的一样,这里只是增加了一些参数。

    但是,原来manager里面的shell内容却不是空的,默认是有一个 app 的,因为如果你不自己加 make_context 的话,默认的代码是加了一个 app,见代码:链接描述(line: 251)

    1. shell这样的应用上下文,我可以不可以理解为:为shell里面赋予一些数据,比如变量啊,或者数据库信息啊什么的,以提供给前面的hello.py来使用?


    前面的对了,这里就是往 shell 里面增加一些默认的变量和函数,但是,并不是给前面的 hello.py 使用,而是让你在启动的 shell 中使用。

    大概就这么多了,希望对题主有帮助。

    2022-10-29 04:37 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有