Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Предотвратить создание нескольких объектов [RSS Feed]

#1 Март 20, 2015 16:19:20

alexashka
Зарегистрирован: 2013-11-05
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Предотвратить создание нескольких объектов

На форме пользователь жмет кнопку- создать документ, пошел запрос на сервер.
Во вьюхе осуществляются некоторые вычисления, запрашивается баланс(по которому становится понятно, можно или нет создавать запись), создается документ и обновляется баланс.
Проблема в том, что если юзер успел быстро несколько раз нажать на “Создать”- создается несколько документов.
То есть первый документ еще создается, и баланс еще не успел обновиться, и в это же время создается другой документ, который видит еще старый баланс.
Можно ли как то блокировать такие повторяющиеся запросы на уровне Django?

Офлайн

#2 Март 20, 2015 16:23:51

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Предотвратить создание нескольких объектов

Как вариант, писать с сессию пользователю какой-нибудь флаг, и пока флаг стоит не принимать запросы по этому урлу.



Офлайн

#3 Март 20, 2015 16:37:20

alexashka
Зарегистрирован: 2013-11-05
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Предотвратить создание нескольких объектов

Думал о таком.
А если такой вариант- юзер накликал, в это время сетевая задержка, браузер пытается отправить несколько запросов, сеть появилась, и запросы пошли практически в одну единицу времени.
То бишь дельта настолько маленькая, что когда начал обрабатываться второй запрос- флаг еще не успел поставиться.
Или это нереально?

Офлайн

#4 Март 20, 2015 17:11:58

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Предотвратить создание нескольких объектов

Можно джаваскриптом задизаблить кнопку после первого нажатия. Конечно, это не спасет от злоумышленников, но от случайных действий спасёт. Наверное, тут вам надо что-то посерьезней простого флага. Например, можно сделать некую очередь запросов, например в каком-нибудь rabbit-mq или сelery, из очереди поочередно (тавтология однако) считываются и обрабатываются запросы (по  событию sub/pub) гарантированно последовательно.



Офлайн

  • Начало
  • » Django
  • » Предотвратить создание нескольких объектов[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version