не работает сессия во Flask python
Хочу залогиниться под своими email и password. Но в account['id'] получаю ошибку:
TypeError: tuple indices must be integers or slices, not str
Я понимаю, что имеется ввиду, но не понимаю как исправить. Как получать id и email именно того пользователя, который хочет залогиниться? Как это решить?
@app.route('/', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
email = request.form['email']
password = request.form['password']
cur = mysql.connection.cursor()
cur.execute('SELECT * FROM users.data WHERE email = %s AND password = %s', (email, password))
account = cur.fetchall()
if account:
session['loggedin'] = True
session['id'] = account[0]
session['email'] = account[1]
return redirect(url_for('profile'))
else:
return 'Email/Password incorrect!'
return render_template('login.html')
@app.route('/profile', methods=['GET','POST'])
def profile():
if 'loggedin' in session:
return render_template('profile.html', email=session['email'])
return redirect(url_for('login'))
Ответы (1 шт):
Предположу, что вы понимаете разницу между методами
fetchall()– число записей в виде упорядоченного спискаfetchmany(size)– число записей не более sizefetchone()– первая запись
Тогда здесь предположу ожидание следующего результата
account = cur.fetchone()
# (id, email)
Следовательно вместо обращения по ключу, использовать индекс
session['id'] = account[0]
session['email'] = account[1]
# Вместо
# session['id'] = account['id']
# session['email'] = account['email']
Обновление
я делал так, но тогда получал только первого пользователя из моей базы данных
Как получать id и email именно того пользователя, который хочет залогиниться?
Вы запрашиваете данные сессии из формы. Но никак не используете их в запросе к базе.
email = request.form['email']
password = request.form['password']
...
cur.execute('SELECT * FROM users.data')
Неизвестно какие имена столбцов вашей таблицы. Предположим, что они совпадают с ключами формы. Тогда вам нужно составить следующий запрос:
cur.execute(f'SELECT * FROM users.data WHERE email = {email} AND password = {password}')
Где {email} и {password} значения от request.form['email'] и request.form['password']