当检查文本框用户名是否等于数据库中的用户名时,它不等于应该等于的时间。我在单独的调试页面上对此进行了测试,它将从数据库中打印出文本,并打印出正确的文本。我在错误文本中打印出用户名进行测试,它打印出相同的用户名,但 Python 说表单用户名不等于数据库用户名。
登录页面代码:
@app.route('/login', methods=['GET', 'POST'])
def login():
db = get_db().cursor()
error = None
if request.method == 'POST':
if request.form['username'] != db.execute('SELECT username FROM users WHERE username=?', (request.form['username'],)).fetchone():
error = 'Invalid username. Username text was: ' + request.form['username']
elif request.form['password'] != db.execute('SELECT password FROM users WHERE username=? AND password=?', (request.form['username'], request.form['password'],)).fetchone():
error = 'Invalid password'
else:
session['logged_in'] = True
flash('You were logged in')
return redirect(url_for('index'))
return render_template('login.html', error=error)
数据库架构:
CREATE TABLE users(id INTEGER PRIMARY KEY, username TEXT unique,
email TEXT unique, password TEXT, rank INT)
示例:我输入spideynn
,数据库中的用户名是spideynn
,但它不等于。
我是SQLite3的新手,也是Python网站的新手,所以任何帮助将不胜感激!
您没有从结果中获取列值。尝试将其重写为:
if request.form['username'] != db.execute('SELECT username FROM users WHERE username=?', (request.form['username'],)).fetchone()['username']: