我在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只通过导入app和db
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 上下文中调用时,我确实有了答案。
我通过设置 FLASK_APP 环境变量告诉 Flask 如何导入应用程序:
export FLASK_APP=microblog.py
Run Code Online (Sandbox Code Playgroud)
看来成功了!
| 归档时间: |
|
| 查看次数: |
5472 次 |
| 最近记录: |