【发布时间】: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()返回第一行,如果没有结果,或None。user = 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