current_user.is_authenticated()上的AttributeError

sky*_*ler 3 python flask

我正在使用Flask-Login,我想通过调用current_user.is_authenticated()来检查用户是否已登录.

我的瓶的应用程序与主组织为蓝本__init__.py,设置了我的应用程序,建立了蓝图,并初始化烧瓶登录文件.我有一个脚本,run.py位于一个目录中__init__.py,实例化应用程序并在调试模式下运行它.

__init.py__ 看起来(部分)像这样:

from flask import Flask, session, request, render_template                                                            
from flask.ext.login import LoginManager, current_user

from panel.views import dash, projects

from panel.users.models import User, AnonymousUser

app = Flask(__name__)
app.config.from_object("configure") 

login_manager = flask_login.LoginManager()
login_manager.init_app(app)
login_manager.login_view = "/signin"
login_manager.anonymous_user = AnonymousUser
@login_manager.user_loader
def load_user(str_id):
    return User.user_loader(str_id)

# Register all blueprints here.
app.register_blueprint(dash.bp, url_prefix="/dash")
app.register_blueprint(projects.bp, url_prefix="/projects")

logging.warning(current_user.is_authenticated())
Run Code Online (Sandbox Code Playgroud)

当我运行它时,run.py(看起来,部分看起来像这样):

from panel import app 

app.run(host='0.0.0.0', debug=True)
Run Code Online (Sandbox Code Playgroud)

提出此异常:

Traceback (most recent call last):
  File "run.py", line 5, in <module>
    from panel import app
  File "/opt/www/panel/panel/__init__.py", line 40, in <module>
    logging.warning(current_user.is_authenticated())
  File "/opt/virtualenvs/coefficient/lib/python2.6/site-packages/werkzeug/local.py", line     336, in __getattr__
    return getattr(self._get_current_object(), name)
  File "/opt/virtualenvs/coefficient/lib/python2.6/site-packages/werkzeug/local.py", line 295, in _get_current_object
    return self.__local()
  File "/opt/virtualenvs/coefficient/lib/python2.6/site-packages/flask_login.py", line 403, in <lambda>
    current_user = LocalProxy(lambda: _request_ctx_stack.top.user)
AttributeError: 'NoneType' object has no attribute 'user'
Run Code Online (Sandbox Code Playgroud)

因为我为了简洁省略了一些行,所以该回溯中的行号与我发布的代码不匹配,但是你可以看到该行logging.warning(current_user.is_authenticated())似乎是错误发生的地方.

任何帮助表示赞赏.

agf*_*agf 6

你不能打电话

current_user.is_authenticated()
Run Code Online (Sandbox Code Playgroud)

在方法之外,因为方法之外的代码将在请求之外运行.

如果您不在请求中,则无法current_user检查身份验证.