shell - app.shell_context_processor 装饰器不会将该函数注册为 shell 上下文函数
问题描述
我在文件夹中的microblog.py
文件中创建了以下函数。~/Programing/Rasa/myflaskapp/app
它创建一个 shell 上下文,将数据库实例和模型添加到 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
函数注册为外壳上下文函数。但是当执行flask shell命令时,~/Programing/Rasa/myflaskapp/
它并没有调用这个函数,而是按预期将它返回的元素记录在shell会话中。
所以我明白了:
(MyFlaskAppEnv) mike@mike-thinks:~/Programing/Rasa/myflaskapp$ flask shell
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
App: app [production]
Instance: /home/mike/Programing/Rasa/myflaskapp/instance
>>> db
Traceback (most recent call last):
File "<console>", line 1, in <module>
NameError: name 'db' is not defined
而不是 :
(venv) $ flask shell
>>> db
<SQLAlchemy engine=sqlite:////Users/migu7781/Documents/dev/flask/microblog2/app.db>
更新:我试图检查功能是否保存完好
但似乎不是:
>>> print(app.shell_context_processors[0]())
Traceback (most recent call last):
File "<console>", line 1, in <module>
IndexError: list index out of range
我microblog.py
只改变了导入app
和db
from app import app, db
@app.shell_context_processor
def make_shell_context():
return {'db': db}
我试图将microblog.py
它放在app
文件夹中甚至删除它,它总是相同的错误:我无法将函数注册为 shell 上下文函数。同时,当我>>> app
在 Flask 上下文中调用时,我确实有一个答案。
解决方案
我通过设置 FLASK_APP 环境变量告诉 Flask 如何导入应用程序:
export FLASK_APP=microblog.py
它似乎成功了!
推荐阅读
- graph - 关于深度优先搜索和生成森林的问题
- html - 在叠加层上使文本变白
- python - 为什么我无法在 PySimpleGUI 中读取击键?
- android - 第二次单击底部导航后片段未加载
- java - 如何停止在活动中循环并同时处理屏幕导航返回的默认值?
- java - 如何在不使用 ServiceLoader.Provider 类的情况下加载服务(为了 J1.8 兼容性)
- javascript - 使用 useReducer/useContext 和 React-Testing-Library 时出现“TypeError: dispatch is not a function”
- mongodb - 来自 mongoc (C) 驱动程序的 MongoDB Atlas 连接间歇性失败,并显示“未找到合适的服务器”
- reactjs - Material UI 线性进度条取决于状态不动画
- c - 未能在 main 中测试函数