烧瓶请求表单用户名不等于数据库文本



当检查文本框用户名是否等于数据库中的用户名时,它不等于应该等于的时间。我在单独的调试页面上对此进行了测试,它将从数据库中打印出文本,并打印出正确的文本。我在错误文本中打印出用户名进行测试,它打印出相同的用户名,但 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']:

最新更新