У меня есть приложение фляги, которое имеет регистрационную форму, которая POST
передает данные в представление registration.py
, где данные добавляются в базу данных SQLite. Каждый раз, когда происходит регистрация, в базу данных вставляется новая строка.
Что ожидается:
После отправки формы, если пользователь нажимает кнопку "Назад" в браузере и пытается отправить форму еще раз, приведенный ниже код должен
try
, чтобы проверить, существует ли электронная почта
- Если
exception
(электронная почта не существует), введите данные
Выпуск:
Когда пользователь нажимает кнопку «Назад» и снова отправляет форму, код в блоке try
не распознает ранее (до нажатия кнопки «Назад») добавленную строку. Сбой запроса select.
И еще более странная вещь:
Однако, когда я просто распечатываю все строки в базе данных непосредственно перед блоком try
, это показывает только что добавленный email
. Однако запрос select не видит его.
Registration.py
блок выдачи :
db = get_db()
# Dumping to log to check if the db actually has the row
cur_e = db.execute('SELECT user_id, user_email FROM cld_user')
ie = cur_e.fetchall()
for i in ie:
print "ID: {} | Email: {}".format(i[0], i[1])
print "end of ID dump"
print user_email
# The above code does print out the row (even after hitting the back button)
try:
# This block however, fails when user submits the form after hitting the back button
print "Trying"
cur_ps = db.execute('SELECT user_id, user_uid FROM cld_user \
WHERE user_email = ?', [user_email])
user_id = cur_ps.fetchone()[0]
user_uid = cur_ps.fetchone()[1]
print "Row exists"
flash(user_id, "success")
except Exception:
print "Exception"
cur_p = db.execute('INSERT OR IGNORE INTO cld_user \
(user_uid, user_name, user_email, user_contact) \
VALUES (?, ?, ?, ?)', [user_uid, user_name,
user_email, user_contact])
user_id = cur_p.lastrowid
print "No row exists"
flash(user_id, "success")