返回介绍

Shell 上下文

发布于 2025-01-02 21:53:49 字数 1671 浏览 0 评论 0 收藏 0

还记得上一节的启动 Python 解释器之后你做过什么吗?第一件事是运行两条导入语句:

>>> from app import db
>>> from app.models import User, Post

开发应用时,你经常会在 Python shell 中测试,所以每次重复上面的导入都会变得枯燥乏味。 flask shell 命令是 flask 命令集中的另一个非常有用的工具。 shell 命令是 Flask 在继 run 之后的实现第二个“核心”命令。 这个命令的目的是在应用的上下文中启动一个 Python 解释器。 这意味着什么? 看下面的例子:

(venv) $ python
>>> app
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'app' is not defined
>>>

(venv) $ flask shell
>>> app
<Flask 'app'>

使用常规的解释器会话时,除非明确地被导入,否则 app 对象是未知的,但是当使用 flask shell 时,该命令预先导入应用实例。 flask shell 的绝妙之处不在于它预先导入了 app ,而是你可以配置一个“shell 上下文”,也就是可以预先导入一份对象列表。

在 microblog.py 中实现一个函数,它通过添加数据库实例和模型来创建了一个 shell 上下文环境:

from app import app, db
from app.models import User, Post

@app.shell_context_processor
def make_shell_context():
    return {'db': db, 'User': User, 'Post': Post}

app.shell_context_processor 装饰器将该函数注册为一个 shell 上下文函数。 当 flask shell 命令运行时,它会调用这个函数并在 shell 会话中注册它返回的项目。 函数返回一个字典而不是一个列表,原因是对于每个项目,你必须通过字典的键提供一个名称以便在 shell 中被调用。

在添加 shell 上下文处理器函数后,你无需导入就可以使用数据库实例:

(venv) $ flask shell
>>> db
<SQLAlchemy engine=sqlite:////Users/migu7781/Documents/dev/flask/microblog2/app.db>
>>> User
<class 'app.models.User'>
>>> Post
<class 'app.models.Post'>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文