いつもお世話になっております。
これまでLoginManagerでログイン、ログアウト機能を持たせていたサイトをBlueprintで複数に分けました。その一部だけにログイン・ログアウト機能をつけたいのです。
server.pyの位置にフォルダA、B、Cを設け、フォルダC以下にログイン機能を持たせようと、以下のようなコードを作成しました。
server.py
1from flask import Flask, render_template, url_for, request, redirect 2 3# 分割したモジュールをインポート 4from A.A import A_app 5from B.B import B_app 6from C.C import C_app 7 8# Flask使用準備 9app = Flask(__name__) 10 11# 分割先のBlueprintを登録 12app.register_blueprint(A_app, url_prefix='/A') 13app.register_blueprint(B_app, url_prefix='/B') 14app.register_blueprint(C_app, url_prefix='/C') 15 16if __name__ == '__main__': 17 app.run(debug=True) 18
C.py
1import sqlite3 2from flask import Flask, render_template, request,Response, abort, redirect, session, Blueprint 3from flask_login import LoginManager, login_user, logout_user, login_required, UserMixin 4from collections import defaultdict 5 6# Blueprintオブジェクトを生成 7C_app = Blueprint('C', __name__,template_folder='templates', static_folder='static') 8 9# ログインマネージャー準備 10login_manager = LoginManager() 11login_manager.init_app(C_app) 12C_app.config['SECRET_KEY'] = "secret" 13 14#ログイン情報をデータベースから引き出す処理(中略) 15 16@login_manager.user_loader 17def load_user(user_id): 18 return users.get(int(user_id)) 19 20@C_app.route('/', methods=["GET", "POST"]) 21def login(): 22 if(request.method == "POST"): 23 # ユーザーチェック 24 # ユーザーが存在した場合はログイン 25 # ユーザーが存在しない場合はエラー 26 #GETならログインページを表示 27 28@C_app.route('/home') 29@login_required 30#home画面へ 31 32@C.route('/logout') 33@login_required 34def logout(): 35#ログアウト処理
localhostで動かしてみました所、以下のようなエラーが出ました。
AttributeError: 'Flask' object has no attribute 'login_manager'
フォルダA、Bの内容は表示されますが、フォルダCだけ上記のエラーとなります。
LoginManagerを準備するタイミングがまずいのではと様々な位置へ移動し実行してみましたがエラーは直りませんでした。
どの部分が間違っており、どのようにすれば意図した機能とすることができるか、何卒ご教授下さいます様お願い申し上げます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/25 02:40
2022/03/25 05:07
2022/03/25 06:22
2022/03/25 07:15
2022/03/25 07:31