app.shell_context_processor 装饰器没有将该函数注册为 shell 上下文函数

Ali*_*ine 4 shell flask

我在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}
Run Code Online (Sandbox Code Playgroud)

app.shell_context_processor解码器寄存器的功能作为壳上下文功能。但是当执行flask shell命令时,in~/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
Run Code Online (Sandbox Code Playgroud)

而不是 :

(venv) $ flask shell
>>> db
<SQLAlchemy engine=sqlite:////Users/migu7781/Documents/dev/flask/microblog2/app.db>
Run Code Online (Sandbox Code Playgroud)

更新:我试图检查该功能是否保存完好

但似乎不是:

>>> print(app.shell_context_processors[0]())
Traceback (most recent call last):
  File "<console>", line 1, in <module>
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)

microblog.py只通过导入appdb

from app import app, db

@app.shell_context_processor
def make_shell_context():
    return {'db': db}
Run Code Online (Sandbox Code Playgroud)

我试图将microblog.py它放在app文件夹中甚至删除它,它总是相同的错误:我无法将函数注册为 shell 上下文函数。同时,当我>>> app在 Flask 上下文中调用时,我确实有了答案。

Ali*_*ine 6

我通过设置 FLASK_APP 环境变量告诉 Flask 如何导入应用程序:

export FLASK_APP=microblog.py
Run Code Online (Sandbox Code Playgroud)

看来成功了!