【问题标题】:Missing userloader or request_loader error缺少 userloader 或 request_loader 错误
【发布时间】:2020-08-15 21:42:46
【问题描述】:

我有烧瓶登录的问题,用户加载器无法正常工作


Exception: Missing user_loader or request_loader. Refer to http://flask-login.readthedocs.io/#how-it-works for more info.

和 当我尝试在 shell 中导入用户模型时:

AttributeError: 'LoginManager' object has no attribute 'load_user'

这是我的代码:

-------------------app/__init__.py----------------

from app.config import Config
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager


#create app
app = Flask(__name__)
app.config.from_object(Config)

#init pckages
db = SQLAlchemy(app)
login_manager = LoginManager(app)

#import Blueprints
from app.blueprints.user.routes import user
from app.blueprints.dashboard.routes import dashboard

#register Blueprints
app.register_blueprint(user)
app.register_blueprint(dashboard)

------------------------------app.py-------------------------------
from app import app

if __name__ == "__main__":

    app.run(debug=True)
------------------------------user model------------------------------------
from app import db, login_manager
from flask_login import UserMixin


@login_manager.load_user
def load_user(user):
    return User.get(user)


class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(20), unique=True, nullable=False)
    avatar = db.Column(db.String(50), default="default.jpg")
    password = db.Column(db.String(60), nullable=False)


    def __repr__(self):
        return self.username

【问题讨论】:

    标签: python flask flask-login


    【解决方案1】:

    装饰器应该是

    @login_manager.user_loader 不是load_user

    【讨论】:

    【解决方案2】:

    您可以对当前的user 模型进行轻微修改。目前,您有:

    @login_manager.load_user
    def load_user(user):
        return User.get(user)
    

    考虑一下:

    1. flask_login 导入LoginManager
    from flask_login import LoginManager
    
    login = LoginManager(app)
    
    1. 如下更新您的user 模型:
    from flask_login import UserMixin
    from app import login # the variable from Flask-login
    
    @login.user_loader
    def load_user(id):
        return User.query.get(int(id)) # slightly modified such that the user is loaded based on the id in the db
    

    用户加载器使用 @login.user_loader 装饰器注册到 Flask-LoginFlask-Login 作为参数传递给函数的 id 将是一个字符串,因此使用数字 ID 的数据库需要将字符串转换为整数,如上所示。

    【讨论】:

      猜你喜欢
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      相关资源
      最近更新 更多