Поскольку я недостаточно знаком с Python и, следовательно, я оставлю специфику кода для вас; Я представлю только идею решения и соответствующие команды SQL (необходимо проверить синтаксис, поскольку у меня нет среды для его проверки).
Допустим, вы хотите установить таймаут в 1 час с момента сохранения пароля, и ваша таблица имеет (как минимум) следующие два поля: Password
и Expiration
(я предполагаю, что пароль будет двоичный тип, чтобы разрешить шифрование и срок действия будет иметь тип DATETIME).
Затем вы бы реализовали следующую команду SQL:
INSERT INTO <your table> (Password , Expiration )
VALUES (%s , DATEADD(NOW(),3600))
[пробелы добавлены только для ясности]
и отправьте эту строку в БД, где %s
будет заменено значением пароля.
Что DATEADD(NOW(),3600)
делает:
- Получает текущую дату и время,
- Добавляет один час к нему.
Как только вы вставите это в свою таблицу, вы позже получите пароль, используя следующую команду:
SELECT Password
FROM <your table>
WHERE User = <could be Username or any other key that you are using now>
AND Expiration > NOW()
означает, получить пароль (если есть), срок действия которого истекает.
Надеюсь, это то, что вы искали.
Ура !!
EDIT
Я добавлю ваш код после исправлений:
@app.route('/signattendance', methods=['GET'])
def signattendance():
stamp = "signed"
error = None
# now = datetime.datetime.today()
# tdelta = datetime.timedelta(seconds=10000)
now = datetime.datetime.now()
if request.method == 'GET':
cur1 = mysql.connection.cursor()
result = cur1.execute("SELECT password FROM generatedcode WHERE codetimeout > NOW()")
if result is False:
cur = mysql.connection.cursor()
cur.execute("INSERT INTO attendance(studentattendance) VALUES(%s,DATEADD(NOW(),3600)", [stamp])
mysql.connection.commit()
cur.close()
# cur1.close()
flash('Succsefully signed', 'Acepted')
else:
flash('You couldnt sign attendance', 'Denied')
else:
return redirect(url_for('dashboard'))
return render_template('signattendance.html', error=error)
Обратите внимание, что я уезжаю в БД для проверки текущего времени.