验证 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 异常。