Найти - Пользователи
Полная версия: Предотвратить создание нескольких объектов
Начало » Django » Предотвратить создание нескольких объектов
1
alexashka
На форме пользователь жмет кнопку- создать документ, пошел запрос на сервер.
Во вьюхе осуществляются некоторые вычисления, запрашивается баланс(по которому становится понятно, можно или нет создавать запись), создается документ и обновляется баланс.
Проблема в том, что если юзер успел быстро несколько раз нажать на “Создать”- создается несколько документов.
То есть первый документ еще создается, и баланс еще не успел обновиться, и в это же время создается другой документ, который видит еще старый баланс.
Можно ли как то блокировать такие повторяющиеся запросы на уровне Django?
FishHook
Как вариант, писать с сессию пользователю какой-нибудь флаг, и пока флаг стоит не принимать запросы по этому урлу.
alexashka
Думал о таком.
А если такой вариант- юзер накликал, в это время сетевая задержка, браузер пытается отправить несколько запросов, сеть появилась, и запросы пошли практически в одну единицу времени.
То бишь дельта настолько маленькая, что когда начал обрабатываться второй запрос- флаг еще не успел поставиться.
Или это нереально?
FishHook
Можно джаваскриптом задизаблить кнопку после первого нажатия. Конечно, это не спасет от злоумышленников, но от случайных действий спасёт. Наверное, тут вам надо что-то посерьезней простого флага. Например, можно сделать некую очередь запросов, например в каком-нибудь rabbit-mq или сelery, из очереди поочередно (тавтология однако) считываются и обрабатываются запросы (по  событию sub/pub) гарантированно последовательно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB