Я пытаюсь найти способ предотвратить двойное представление пользователями моих форм. У меня есть javascript, который отключает кнопку отправки, но есть еще случайный пользователь, который находит способ удвоить отправку.
У меня есть вид на многократно используемую библиотеку, которую я мог бы создать для защиты от этого.
В моей идеальной библиотеке блок кода будет выглядеть примерно так:
try:
with acquire_lock({'field1':'abc', 'field2':'def'}) as lock:
response = #do some credit card processing
lock.response = response
except SubmissionWasDuplicate, e:
response = e.response
Стол блокировки будет выглядеть примерно так:
duplicate_submission_locks
- submit_hash # MD5 представленных аргументов
- ответ # маринованные данные
- created_at #, используемый для подметания этой таблицы
- lock_expired # boolean, означающий, что срок действия блокировки истек.
Кто-нибудь знает, если это уже существует? Это, кажется, трудно писать, поэтому, если этого не существует, я могу написать его сам.