私は Flask-Login を使用しており、current_user.is_authenticated() を呼び出してユーザーがログインしているかどうかを確認したいと考えています。
__init__.py
私の Flask アプリケーションは、アプリをセットアップし、ブループリントをセットアップし、Flask-Login を初期化するメイン ファイルを含むブループリントに編成されています。アプリケーションをインスタンス化し、デバッグモードの場合はそれを実行するスクリプトがあり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.py
(部分的には次のように見えます)から:
from panel import app
app.run(host='0.0.0.0', debug=True)
この例外が発生します:
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'
簡潔にするために一部の行を省略したため、そのトレースバックの行番号は投稿したコードと一致しませんが、その行logging.warning(current_user.is_authenticated())
がエラーが発生した場所のようであることがわかります。
どんな助けでも大歓迎です。