duomi6 2018-10-10 05:50 采纳率: 0%
浏览 633

在 flask 框架写登录注册系统中,总是报这个错误是怎么回事? 求大神告知,谢谢!

在 flask 框架写登录注册系统中,总是报这个错误是怎么回事? 求大神告知,谢谢!(* C:\Python27\lib\site-packages\flask_sqlalchemy__init__.py:794: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this warning. 'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '* Debugger is active!**。)。

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 06:37
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由于 Flask-SQLAlchemy 的一个警告导致的。Flask-SQLAlchemy 是 Flask 库的一部分,用于处理数据库操作。当你尝试使用 SQLAlchemy 来查询或更新数据时,它会生成一些警告来提醒你关于某些特性是否应该被启用或者禁用。

    在你的特定情况下,Flask-SQLAlchemy 在运行时检测到 SQLALCHEMY_TRACK_MODIFICATIONS 关键字是否被设置为 True 或者 False。如果你没有设置这个关键字,那么 Flask-SQLAlchemy 将不会跟踪数据库的修改,并且这些修改将不被追踪。

    因此,在你的代码中,当你试图通过 ORM 查询或更新数据时,你会看到这个警告:

    from flask import Flask, render_template, request
    
    app = Flask(__name__)
    
    # 设置SQLAlchemy引擎和模型
    engine = create_engine('sqlite:///example.db')
    Base.metadata.create_all(engine)
    
    @app.route('/login', methods=['GET', 'POST'])
    def login():
        if request.method == 'POST':
            # 从表单提交的数据获取用户名和密码
            username = request.form['username']
            password = request.form['password']
    
            # 使用ORM查询用户信息
            user = User.query.filter_by(username=username).first()
    
            # 如果查询成功,检查密码是否正确
            if user and user.password == password:
                return redirect(url_for('index'))
    
            else:
                error = "用户名或密码错误"
                return render_template('login.html', error=error)
    

    在这个例子中,当用户提交表单并尝试登录时,如果密码输入正确,就会跳转到 'index' 页面。但是,如果你忘记设置 SQLALCHEMY_TRACK_MODIFICATIONS,那么在 render_template 中,Flask-SQLAlchemy 将会抛出这个警告。

    解决方法很简单:确保你在启动 Flask 应用程序之前设置了 SQLALCHEMY_TRACK_MODIFICATIONS。例如,你可以这样做:

    import os
    
    if __name__ == '__main__':
        app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
        app.run(debug=True)
    

    这将会关闭 SQLALCHEMY_TRACK_MODIFICATIONS 关键字,从而避免出现警告。

    评论

报告相同问题?