烧瓶 + Wsgi + Docker语言 - 尚未安装用户加载程序



在尝试运行一个在 docker 配置中使用 wsgi、nginx 的烧瓶项目时,我遇到了以下错误:

尚未为此登录管理器安装user_loader。有关详细信息,请参阅 https://flask-login.readthedocs.io/en/latest/#how-it-works。但是,如果不考虑登录,系统工作正常。

我该如何解决这个问题?

更多信息:

我的系统文件如下:

__init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager
from flask_bcrypt import Bcrypt
from flask_login import LoginManager

app = Flask(__name__)
app.config.from_object('instance.config')
db = SQLAlchemy(app)
migrate = Migrate(app, db)
flask_bcrypt = Bcrypt(app)

manager = Manager(app)

用于控制用户会话的代码:

from instance.config import SECRET_KEY_LOGIN
login_manager = LoginManager(app)
---------------------------------------------------------------------------
login.py
from flask import render_template, request, Blueprint, url_for, redirect
from flask_login import login_user, logout_user, current_user
from app import flask_bcrypt, login_manager
from app.models.login import LoginForm
from app.models.tabelas import Usuario
sign_in = Blueprint('sign_in', __name__)
@login_manager.user_loader
def load_user(id_usuario):
return Usuario.query.filter_by(id_usuario=id_usuario).first()
@login_manager.request_loader
def request_loader(_request):
#   print ('using request loader')
#   return "load_user_token(_request)"

@sign_in.route('/', methods=['GET', 'POST'])
@sign_in.route('/login', methods=['GET','POST'])
def login():
if current_user.is_authenticated:
return redirect(url_for('home'))
else:
error = None
form = LoginForm()
if request.method == 'POST':
if form.validate_on_submit():
usuario = Usuario.query.filter_by(ds_email = form.ds_email.data).first()
if usuario and flask_bcrypt.check_password_hash(usuario.ds_password, form.ds_password.data):
login_user(usuario)
return redirect(url_for('home'))
else:
error = 'Invalid Login .'
else:
error = 'Error'
print(form.errors)

return render_template('admin/login.html', form=form, error=error)

在login_manager实例下方添加此代码__init__.py

@login_manager.user_loader
def load_user(id):
return User.query.filter_by(user_id=id).first()

之后,您可以从 login.py 中删除@login_manager装饰器及其尊重函数

最新更新