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

时间:2015-03-11 23:53:11

标签: python sqlite flask

当检查文本框用户名是否等于数据库中的用户名时,它应该在何时应该等于。我在一个单独的调试页面上测试了它,它会从数据库中打印出文本,并打印出正确的文本。我在错误文本中打印出用户名来测试它,并打印出相同的用户名,但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网站的新手,所以非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您没有从结果中获取列值。尝试将其重写为:

if request.form['username'] != db.execute('SELECT username FROM users WHERE username=?', (request.form['username'],)).fetchone()['username']: