【问题标题】:flask error 'NoneType' object has no attribute 'password'烧瓶错误“NoneType”对象没有属性“密码”
【发布时间】:2019-09-30 10:38:11
【问题描述】:
class Register(db.Model):
    __tablename__ = 'register'
    register_id = db.Column(db.Integer, primary_key=True)
    firstname = db.Column(db.String(50), nullable=False)
    lastname = db.Column(db.String(50), nullable=False)
    gender = db.Column(db.String(20), nullable=False)
    occupation = db.Column(db.String(20), nullable=False)
    dateofbirth = db.Column(db.String(50), nullable=True)
    address = db.Column(db.String(255), nullable=False)
    contact = db.Column(db.String(20), nullable=False)
    email_id = db.Column(db.String(20), unique=True, nullable=False)
    password = db.Column(db.String(20), nullable=False)

这是登录功能

@app.route("/login",methods=['GET','POST'])
def login_post():
    email = request.form.get('email')
    password = request.form.get('pass')
    user = Register.query.filter_by(email_id=email).first()
    print("password",password)
    print("email",email)
    print(user.password)
    if not user or not check_password_hash(user.password, password):
        flash('Please check your login details and try again.')
        return redirect(url_for('register'))
    login_user(user)
    return redirect(url_for('index'))
    return render_template('login.html')

这是错误

    File "C:\Users\dhruv\Desktop\Farmer\venv\lib\site-packages\flask\app.py", line 2463, in __call__
    return self.wsgi_app(environ, start_response)
    File "C:\Users\dhruv\Desktop\Farmer\venv\lib\site-packages\flask\app.py", line 2449, in wsgi_app
    response = self.handle_exception(e)
    File "C:\Users\dhruv\Desktop\Farmer\venv\lib\site-packages\flask\app.py", line 1866, in 
    handle_exception
    reraise(exc_type, exc_value, tb)
    File "C:\Users\dhruv\Desktop\Farmer\venv\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
    File "C:\Users\dhruv\Desktop\Farmer\venv\lib\site-packages\flask\app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request() 
    File "C:\Users\dhruv\Desktop\Farmer\venv\lib\site-packages\flask\app.py", line 1951, in 
    full_dispatch_request
    rv = self.handle_user_exception(e)
    File "C:\Users\dhruv\Desktop\Farmer\venv\lib\site-packages\flask\app.py", line 1820, in 
    handle_user_exception
    reraise(exc_type, exc_value, tb)
    File "C:\Users\dhruv\Desktop\Farmer\venv\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
    File "C:\Users\dhruv\Desktop\Farmer\venv\lib\site-packages\flask\app.py", line 1949, in 
    full_dispatch_request
    rv = self.dispatch_request()
    File "C:\Users\dhruv\Desktop\Farmer\venv\lib\site-packages\flask\app.py", line 1935, in 
    dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
    File "C:\Users\dhruv\Desktop\Farmer\Main.py", line 46, in login_post
    print(user.password)
    AttributeError: 'NoneType' object has no attribute 'password'

如何解决?我正在创建登录身份验证,此行 user = Register.query.filter_by(email_id=email).first() 给了我这个错误。这里有什么问题? 这是因为浏览器cookies吗?或任何带有python版本的东西?我在 localhost 上使用 python 3.7 最新版本并在 pycharm 中编码

【问题讨论】:

  • Query.first() 返回第一行,如果没有结果, Noneuser = Register.query.filter_by(email_id=email).first() 正在返回None,所以它与执行None.password 相同。您需要弄清楚为什么您的查询没有返回记录,很可能数据库中没有指定电子邮件的用户。
  • 用户在数据库中存在指定的电子邮件 ID。我已经通过编写“user = Register.query.filter_by(email_id='info@example.com').first()”手动检查了它,并且数据库中存在'info@example.com'
  • 如果print(user.password) 引发AttributeError: 'NoneType' object has no attribute 'password',那么user None,只有当查询不匹配任何记录时才会发生这种情况。尝试检查从表单提交的电子邮件的值。
  • 当我使用注册在注册表单中输入详细信息然后使用同一个表我的数据库正在更新但是当我想通过同一个表检查详细信息以使用相同的电子邮件进行身份验证时给我一个错误
  • 你在使用 wtf_forms 吗?

标签: python flask-sqlalchemy flask-login


【解决方案1】:

首先,检查您的模型是否完美,并确保您在用户表中至少有一条记录。

然后删除浏览器cookie并尝试。

如果你仍然面临同样的问题,试试这个:

转到flask-user package > usermixin.py并更改以下代码。

前行:

user_password = '' if user_manager.USER_ENABLE_AUTH0 or user == None else user.password[-8:]

之后的行:

user_password = '' if user_manager.USER_ENABLE_AUTH0 else user.password[-8:]

【讨论】:

    猜你喜欢
    • 2020-08-23
    • 2019-08-14
    • 1970-01-01
    • 2022-11-13
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多