Создание простого приложения для входа/регистрации на фляге, и я столкнулся с этой проблемой?
Что я здесь делаю неправильно? Форма регистрации работает отлично. Не работает раздел авторизации Как исправить. Я должен сделать это, чтобы заменить flask-mysqldb на mysql.connector для python.
Я получаю эту ошибку при входе в систему:
mysql.connector.errors.InternalError
mysql.connector.errors.InternalError: найден непрочитанный результат
создание нового подключения к дБ для входа в систему дает мне эту ошибку
встроенные .TypeError
TypeError: '>' не поддерживается между экземплярами 'NoneType' и 'int'
app.py это:
from flask import Flask, render_template, flash, redirect, url_for, session, request, logging
from wtforms import Form, StringField, TextAreaField, PasswordField, validators
from passlib.hash import sha256_crypt
import mysql.connector
app = Flask(__name__)
app.secret_key='secretkey'
#Config MySQL
cnx = mysql.connector.connect(user='jay', password='jay',
host='127.0.0.1',
database='usertable')
#cnx.close()
@app.route('/')
def index():
return render_template('home.html')
class RegisterForm(Form):
name = StringField('Name', [validators.Length(min=1, max=50)])
username = StringField('Username', [validators.Length(min=4, max=25)])
email = StringField('Email', [validators.Length(min=6, max=50)])
password = PasswordField('Password', [
validators.DataRequired(),
validators.EqualTo('confirm', message='Passwords do not match')
])
confirm = PasswordField('Confirm Password')
@app.route('/register', methods=['GET','POST'])
def register():
form = RegisterForm(request.form)
if request.method == 'POST' and form.validate():
name = form.name.data
email = form.email.data
username = form.username.data
password = sha256_crypt.encrypt(str(form.password.data))
#connect to db
#create Cursor
cur = cnx.cursor()
cur.execute("INSERT INTO users(name, email, username, password) VALUES(%s, %s, %s, %s)", (name, email, username, password))
#commit 2 DB
cnx.commit()
#close connection
cur.close()
cnx.close()
flash('You are now registered and can log in', 'success')
return redirect(url_for('login'))
return render_template('register.html', form=form)
#USER login CONFIGURaTION
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
#get form fields
username = request.form['username']
password_candidate = request.form['password']
#connect to db
conn = mysql.connector.connect(user='jay', database='table_users')
#cursor creation
cur = cnx.cursor(dictionary=True, buffering=True)
#get user by username
result = cur.execute("SELECT * FROM users Where username = %s", [username])
if cur:
#get stored hash
data = cur.fetchone()
password = data['password']
#compare passwords
if sha256_crypt.verify(password_candidate, password):
app.logger.info('Password MATCHED')
else:
app.logger.info('Password not MATCHED')
else:
app.logger.info('No USER')
cur.close()
cnx.close()
return render_template('signin.html')
if __name__ == '__main__':
app.run(debug=True)
result = cur.execute("SELECT * FROM users WHERE username = %s", username)
без скобок? в противном случае попробуйте вывестиresult
в консоль - person Mangohero1   schedule 28.12.2017cur = cnx.cursor(dictionary=True)
наcur = cnx.cursor(dictionary=True, buffered=True)
- person Mangohero1   schedule 28.12.2017result =
. Затем вы можете изменитьif result > 0
наif cur
(должно быть NoneType, если совпадение в имени пользователя не найдено). Хотя может и ошибаюсь, но только предположение - person Mangohero1   schedule 28.12.2017if cur:
, а неif cur > 0:
, извините за это! - person Mangohero1   schedule 28.12.2017