Выполнение функции Django - PullRequest
       7

Выполнение функции Django

0 голосов
/ 20 марта 2019

В представлениях у меня есть определенная функция, которая выполняется, когда пользователь отправляет форму онлайн.После отправки формы запускаются некоторые транзакции базы данных, которые затем выполняются на основе существующих данных в API базы данных:

triggerapi():
   execute API to send Email to the user and the administrator about 
   the submitted form
def databasetransactions():
    check the data in the submitted form with the data in DB
    if the last data submitted by the user is before 10 mins or more: 
       triggerapi()
def formsubmitted(request):
    save the user input in variables
    Databasetransactions()
    save the data from the submitted form in the DB

В приведенном выше случае пользователь нажимает кнопку «Отправить» 2 раза меньше.чем продолжительность 5 миллисекунд.Таким образом, 2 параллельных данных начинают обрабатываться, и оба вызывают электронную почту, которая не соответствует желаемому поведению.

Есть ли способ избежать этого?Так что для пользовательского сеанса приложение должно принимать данные только после завершения всей более старой обработки данных?

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Существует несколько способов решения этой проблемы. Одним из них будет создание новой переменной сеанса
request.session['activetransaction'] = True
Однако это потребует от вас прохождения запроса, если только он не был передан, и мы не получили измененную часть кода. Вы также можете добавить флаг экземпляра / класса для него таким же образом и проверить его.
Другой способ, который может сработать, если вам нужно обработать эти представления после предыдущего, вы всегда можете добавить while request.session['activetransaction']: и выполнить обработку позже.

def formsubmitted(request):
    if 'activetransaction' not in request.session or not request.session['activetransaction']:
        request.session['activetransaction'] = True
        # save the user input in variables
        Databasetransactions()
        # save the data from the submitted form in the DB
        request.session['activetransaction'] = False
    ...
0 голосов
/ 20 марта 2019

Поскольку мы говорим в псевдокоде, одним из способов может быть использование одноэлементного шаблона для triggerapi() и возвращение Не разрешено в случае, если он уже был истантирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...