Форум сайта python.su
На форме пользователь жмет кнопку- создать документ, пошел запрос на сервер.
Во вьюхе осуществляются некоторые вычисления, запрашивается баланс(по которому становится понятно, можно или нет создавать запись), создается документ и обновляется баланс.
Проблема в том, что если юзер успел быстро несколько раз нажать на “Создать”- создается несколько документов.
То есть первый документ еще создается, и баланс еще не успел обновиться, и в это же время создается другой документ, который видит еще старый баланс.
Можно ли как то блокировать такие повторяющиеся запросы на уровне Django?
Офлайн
Как вариант, писать с сессию пользователю какой-нибудь флаг, и пока флаг стоит не принимать запросы по этому урлу.
Офлайн
Думал о таком.
А если такой вариант- юзер накликал, в это время сетевая задержка, браузер пытается отправить несколько запросов, сеть появилась, и запросы пошли практически в одну единицу времени.
То бишь дельта настолько маленькая, что когда начал обрабатываться второй запрос- флаг еще не успел поставиться.
Или это нереально?
Офлайн
Можно джаваскриптом задизаблить кнопку после первого нажатия. Конечно, это не спасет от злоумышленников, но от случайных действий спасёт. Наверное, тут вам надо что-то посерьезней простого флага. Например, можно сделать некую очередь запросов, например в каком-нибудь rabbit-mq или сelery, из очереди поочередно (тавтология однако) считываются и обрабатываются запросы (по событию sub/pub) гарантированно последовательно.
Офлайн