当检查文本框用户名是否等于数据库中的用户名时,它应该在何时应该等于。我在一个单独的调试页面上测试了它,它会从数据库中打印出文本,并打印出正确的文本。我在错误文本中打印出用户名来测试它,并打印出相同的用户名,但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网站的新手,所以非常感谢任何帮助!
答案 0 :(得分:1)
您没有从结果中获取列值。尝试将其重写为:
if request.form['username'] != db.execute('SELECT username FROM users WHERE username=?', (request.form['username'],)).fetchone()['username']: