【问题标题】:flask importerror: cannot import name storage烧瓶导入错误:无法导入名称存储
【发布时间】:2016-10-10 10:21:14
【问题描述】:

我尝试使用flask-cloudy上传文件,但我无法导入存储(flask-cloudy中的一个模型) 这就是我的配置方式:

class DevelopmentConfig():
    DEBUG = True
    SECRET_KEY = 'I_will_never_told_you'
    STORAGE_PROVIDER = "LOCAL"
    STORAGE_CONTAINER = "./data"
    STORAGE_KEY = ""
    STORAGE_SECRET = ""
    STORAGE_SERVER = True

我在 app/init.py 中初始化它:

from flask import Flask, redirect, request, url_for, g
from .main import main as main_blueprint
from .auth import auth as auth_blueprint
from config import DevelopmentConfig
from flask_login import LoginManager
from flask_cloudy import Storage     #import Storage

login_manager = LoginManager()
login_manager.session_protection = 'strong'
login_manager.login_view = 'auth.login'

def create_app():
    app = Flask(__name__)
    app.config.from_object(DevelopmentConfig)
    app.register_blueprint(main_blueprint)
    app.register_blueprint(auth_blueprint, url_prefix='/auth')
    login_manager.init_app(app)

    storage = Storage()     
    storage.init_app(app)        #initialise it 

    @login_manager.user_loader
    def load_user(user_id):
        from .models import User
        try:
            user = User.get(User.id == int(user_id))
        except User.DoesNotExist:
            user = None
        return user

    @login_manager.unauthorized_handler
    def unauthorized_callback():
        return redirect(url_for('auth.login'))

    return app

然后我尝试在 app/main/views.py 中导入存储: 我试过了

from app import storage

from .. import storage

from ..__init__ import storage

但它仍然无法正常工作 当我使用from app import storagefrom .. import storage 它是这样长大的:

Traceback (most recent call last):
  File "run.py", line 1, in <module>
    from app import create_app
  File "/home/lc/workspace/homeworkAdminSystem/app/__init__.py", line 2, in <module>
    from .main import main as main_blueprint
  File "/home/lc/workspace/homeworkAdminSystem/app/main/__init__.py", line 5, in <module>
    from . import views, errors
  File "/home/lc/workspace/homeworkAdminSystem/app/main/views.py", line 5, in <module>
    from .. import storage
ImportError: cannot import name storage

当我尝试from ..__init__ import storage 它出现了:

Traceback (most recent call last):
  File "run.py", line 1, in <module>
    from app import create_app
  File "/home/lc/workspace/homeworkAdminSystem/app/__init__.py", line 2, in <module>
    from .main import main as main_blueprint
  File "/home/lc/workspace/homeworkAdminSystem/app/main/__init__.py", line 5, in <module>
    from . import views, errors
  File "/home/lc/workspace/homeworkAdminSystem/app/main/views.py", line 6, in <module>
    from ..__init__ import storage
  File "/home/lc/workspace/homeworkAdminSystem/app/__init__.py", line 3, in <module>
    from .auth import auth as auth_blueprint
  File "/home/lc/workspace/homeworkAdminSystem/app/auth/__init__.py", line 5, in <module>
    from . import views
  File "/home/lc/workspace/homeworkAdminSystem/app/auth/views.py", line 4, in <module>
    from ..models import db, User, Homework, Score
  File "/home/lc/workspace/homeworkAdminSystem/app/models.py", line 3, in <module>
    from .__init__ import login_manager
ImportError: cannot import name login_manager

这是我的模型(app/models),我使用了from .__init__ import login_manager,但效果很好,所以我对此感到困惑,那么如何在我的views.py中导入存储?

【问题讨论】:

    标签: python flask flask-extensions


    【解决方案1】:

    您需要将存储初始化放在create_app 函数之外。

    storage 变量现在只能在 create_app 函数内部访问。

    【讨论】:

    • 哦,我希望我现在能拿到我的电脑,我明天早上试试,谢谢。
    • 我曾尝试将存储初始化放在 create_app 之外,但仍然无法工作。不管怎样,谢谢。
    • 也许完全摆脱这个功能?或者你也可以返回存储变量
    • 我昨天试过return storage但是不能正常工作,可能是我配置的时候出错了,因为github中的例子作者把所有的config和initialistaion放在一起我试了一下,成功了.也许我可以把所有这些都放在我的views.py中
    猜你喜欢
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 2018-09-16
    • 2015-12-24
    • 1970-01-01
    相关资源
    最近更新 更多