Как исправить TypeError: '>' не поддерживается между экземплярами 'NoneType' и 'int' - PullRequest
0 голосов
/ 19 октября 2019

Я настраиваю форму входа в систему, используя Python / Flask / mysql.connector, однако получаю сообщение об ошибке Файл "F: \ Python \ Apps \ webapp \ app.py", строка 84, при входе в систему, если результат>0: TypeError: '>' не поддерживается между экземплярами 'NoneType' и 'int'.

Я пробовал разные вещи, такие как изменение оператора if для чего-то другого и проверка правильности словаря, но я получаю ту же ошибку.

#Login
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        #Get Form
        username = request.form['username']
        password_candidate = request.form['password']

        #Get user by username
        result = cursor.execute("SELECT * FROM users WHERE username = %s", [username])

        if result > 0:
            #Get stored hash
            data = cursor.fetchone()
            password = data['password']

            #compare the Passwords
            if sha256_crypt.verify(password_candidate, password):
                #Passed
                session['logged_in'] = True
                session['username'] = username

                flash('You are now logged in', 'success')
                return redirect(url_for('dashboard'))
            else:
                error = 'Invalid Login'
                return render_template('login.html', error=error)
            #Close connection
            cursor.close()
        else:
            error = 'Username not found'
            return render_template('login.html', error=error)
    return render_template('login.html')

Я ожидал, что форма подпишет вас, если информация, которую вы используете для регистрации, действительна, или отобразит неудачный вход в систему, если информация недействительна. Очевидно, эта информация будет извлечена из базы данных MySQL.

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

Я исправил проблему. Я изменил с import mysql.connector на from flask_mysqldb import MySQL

Удалите конфигурацию mysql.connector и добавил детали базы данных в соответствии с приведенным ниже примером

 app.config['MYSQL_HOST'] = 'localhost'
 app.config['MYSQL_USER'] = 'scott'
 app.config['MYSQL_PASSWORD'] = ''
 app.config['MYSQL_DB'] = 'users'
 app.config['MYSQL_CURSORCLASS'] = 'DictCursor'

После этого мне пришлось инициализировать приложение

mysql = MySQL(app)

И последняя часть создавала курсор, как в примере ниже.

cursor = mysql.connection.cursor()

Я также изменяю свое выражение if, чтобы отразить совет @Harshal Parekh.

Вместо

    if result > 0:

Я использовал

    if result:

Надеюсь, это поможет кому-то еще.

0 голосов
/ 19 октября 2019
result = cursor.execute("SELECT * FROM users WHERE username = %s", [username])

Эта строка вызывает проблему. Он возвращает вам нулевое значение, возможно, потому что имя пользователя не существует.

Я вижу, что у вас есть if...else, чтобы обработать это, но если значение результата None, вы не можете сравнить его сцелочисленное значение - 0 в этом случае.

В python вы можете просто проверить, не является ли значение None, выполнив это:

if result:
    # code
else:
    # code

Надеюсь, это поможет. Удачи.

...