AttributeError:'Flask'对象没有属性'login_manager' - Login_Manager

Nur*_*ihu 7 python flask

我在我的应用程序中遇到Login_manager问题.这里抛出了错误

def authenticate(form):
    if form.validate_on_submit():
        try:
            user = session.query(User).filter(User.email == form.email.data).first()
        except :# models.DoesNotExist:
            flash("Your email or password does not match !", "error")
        else :
            if check_password_hash(user.password,form.password.data):
                login_user(user)
                flash("You've been logged in", "success")
                return redirect(url_for('index'))
            else :
                flash("Your email or password does not match !", "error")
    return render_template('login.html',form = form)  
Run Code Online (Sandbox Code Playgroud)

这个问题提出来了

login_user(用户)

我的login_manager配置在authenticicate下面,如下所示.

if __name__ == '__main__':

    app.secret_key = 'Innalhamdulillah.nahmaduhu.taalanastainubihi.wanastagfiruh!'
    app.run(debug = DEBUG, host=HOST, port= PORT)

    login_manager = LoginManager()
    login_manager.init_app(app)
    login_manager.login_view = 'login'

    @login_manager.user_loader
    def load_user(userid):
        try:
            return session.query(User).filter(User.id == userid).first()
        except models.DoesNotExist :
            return None
Run Code Online (Sandbox Code Playgroud)

并在我的声明中

from flask.ext.login import LoginManager,login_user
Run Code Online (Sandbox Code Playgroud)

请问我该如何解决这个问题,原因是什么?我怎么能更好地理解它?我怀疑我的def load_user(userid):bcos我不是很清楚这是我的第一次.任何帮助,将不胜感激.

Men*_*sur 16

在初始化LoginManager之前运行应用程序.所以你应该:

app.secret_key = 'xxxxyyyyyzzzzz'

login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login'

app.run(debug = DEBUG, host=HOST, port= PORT)
Run Code Online (Sandbox Code Playgroud)


小智 5

我刚刚学习Flask,也遇到了这个问题。我发现我没有初始化应用程序的login_manager。

所以我改变了:

login_manager = LoginManager()
Run Code Online (Sandbox Code Playgroud)

login_manager = LoginManager(app)
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题。