文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
Shell 上下文
还记得上一节的启动 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论