Flask 请求表单用户名不等于数据库文本
Flask request form username does not equal database text when it should
在检查文本框用户名是否与数据库中的用户名相同时,它不应该等于。我在一个单独的调试页面上测试了它,它将打印出数据库中的文本,并打印出正确的文本。我打印出错误文本中的用户名来测试它,它打印出相同的用户名,但是 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']:
在检查文本框用户名是否与数据库中的用户名相同时,它不应该等于。我在一个单独的调试页面上测试了它,它将打印出数据库中的文本,并打印出正确的文本。我打印出错误文本中的用户名来测试它,它打印出相同的用户名,但是 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']: