验证 Dynamodb 中的数据仅在存在数据时有效
Validate data in Dynamodb is only working through if data is present
这是一个相当简单和愚蠢的问题,但我似乎无法理解手头的问题。
我正在尝试创建一个注册页面,用户可以在其中输入他们的电子邮件,如果他们的电子邮件存在,那么该函数会将项目放入数据库中,如果没有,它将 return“电子邮件是已经存在。
def register():
if request.method=='POST':
#get user information from form
email=request.form['email']
username=request.form['username']
password=request.form['password']
#get table
table=dynamodb.Table('login')
#query table and comapre email
response = table.query(
KeyConditionExpression=Key('email').eq(email)
)
#put results in items
items = response['Items']
#validate email
if email != items[10]['email']:
#put user information into database table
table.put_item(
Item={
'email':email,
'user_name':username,
'password':password
}
)
#redirect user to login page after signup
flash('You are signed up! Please login!')
return render_template('login.html')
flash("Email already Exists")
return render_template('register.html')
编辑:-
def register():
if request.method=='POST':
#get user information from form
email=request.form['email']
username=request.form['username']
password=request.form['password']
#get table
table=dynamodb.Table('login')
#query table and comapre email
response = table.query(
KeyConditionExpression=Key('email').eq(email)
)
#put results in items
items = response['Items']
if not items:
#validate email
if email != items[0]['email']:
#put user information into database table
table.put_item(
Item={
'email':email,
'user_name':username,
'password':password
}
)
#redirect user to login page after signup
flash('You are signed up! Please login!')
return render_template('login.html')
else:
print("list empty!")
flash("Email already Exists")
return render_template('register.html')
我的问题是,当用户输入一个已经存在的电子邮件时,该函数将 return“电子邮件已经存在”,但是当用户输入一个唯一的电子邮件时,if 语句抛出一个“列表索引超出范围”。我确切地知道这个错误是什么意思,但我不知道的是这个函数是什么导致了这个错误?!我的 dynamodb 中有 10 个条目,当我输入 10 而不是 0 时,我仍然得到同样的错误。
非常感谢帮助。
您应该首先检查项目是否 list is empty。当您输入唯一的电子邮件时,项目将是一个空列表。
如果列表没有任何项目并且您检查第 0 个索引,它将抛出 list index out of range
异常。
这是一个相当简单和愚蠢的问题,但我似乎无法理解手头的问题。
我正在尝试创建一个注册页面,用户可以在其中输入他们的电子邮件,如果他们的电子邮件存在,那么该函数会将项目放入数据库中,如果没有,它将 return“电子邮件是已经存在。
def register():
if request.method=='POST':
#get user information from form
email=request.form['email']
username=request.form['username']
password=request.form['password']
#get table
table=dynamodb.Table('login')
#query table and comapre email
response = table.query(
KeyConditionExpression=Key('email').eq(email)
)
#put results in items
items = response['Items']
#validate email
if email != items[10]['email']:
#put user information into database table
table.put_item(
Item={
'email':email,
'user_name':username,
'password':password
}
)
#redirect user to login page after signup
flash('You are signed up! Please login!')
return render_template('login.html')
flash("Email already Exists")
return render_template('register.html')
编辑:-
def register():
if request.method=='POST':
#get user information from form
email=request.form['email']
username=request.form['username']
password=request.form['password']
#get table
table=dynamodb.Table('login')
#query table and comapre email
response = table.query(
KeyConditionExpression=Key('email').eq(email)
)
#put results in items
items = response['Items']
if not items:
#validate email
if email != items[0]['email']:
#put user information into database table
table.put_item(
Item={
'email':email,
'user_name':username,
'password':password
}
)
#redirect user to login page after signup
flash('You are signed up! Please login!')
return render_template('login.html')
else:
print("list empty!")
flash("Email already Exists")
return render_template('register.html')
我的问题是,当用户输入一个已经存在的电子邮件时,该函数将 return“电子邮件已经存在”,但是当用户输入一个唯一的电子邮件时,if 语句抛出一个“列表索引超出范围”。我确切地知道这个错误是什么意思,但我不知道的是这个函数是什么导致了这个错误?!我的 dynamodb 中有 10 个条目,当我输入 10 而不是 0 时,我仍然得到同样的错误。
非常感谢帮助。
您应该首先检查项目是否 list is empty。当您输入唯一的电子邮件时,项目将是一个空列表。
如果列表没有任何项目并且您检查第 0 个索引,它将抛出 list index out of range
异常。