# 登录页面 @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] # 查询用户是否存在 cur = mysql.connection.cursor() cur.execute("SELECT * FROM users WHERE username = %s", (username,)) user = cur.fetchone() cur.close() if user: if user['password'][0:-1] == password: session['username'] = username return redirect(url_for('home')) else: return render_template('login.html', error='Incorrect Password') else: return render_template('login.html', error='User Not Found') else: return render_template('login.html')这段代码报错tuple indices must be integers or slices, not str
时间: 2023-12-25 17:03:21 浏览: 83
使用Flask Login实现用户登录和权限验证.zip
这个错误通常发生在尝试使用字符串索引访问元组中的元素时。在上述代码中,出现此错误的可能原因是在获取用户数据后,使用了字典的方式访问元组中的元素。元组是不可变的,因此无法通过字典方式访问元素。
为了解决这个错误,可以将获取到的元组转换为字典,然后再使用字典方式访问元素。可以使用 cursor 对象获取字段名(例如,使用 `cursor.description`),并将其与元组中的值一起转换为字典。下面是修改后的代码:
```
# 查询用户是否存在
cur = mysql.connection.cursor()
cur.execute("SELECT * FROM users WHERE username = %s", (username,))
user_data = cur.fetchone()
cur.close()
if user_data:
columns = [column[0] for column in cur.description]
user = dict(zip(columns, user_data))
if user['password'][0:-1] == password:
session['username'] = username
return redirect(url_for('home'))
else:
return render_template('login.html', error='Incorrect Password')
else:
return render_template('login.html', error='User Not Found')
```
注意,在使用完 cursor 对象后,应该及时关闭连接以释放资源。
阅读全文