Установка таймера для выполнения представления Django

Я пытаюсь предотвратить выполнение представления Django более одного раза в течение часа. Другими словами, если функция выполняется в 15:00, все последующие запросы всех пользователей должны быть проигнорированы до 17:00, когда ей будет разрешено выполниться еще раз.

Пробовал с таймером, но он сбрасывается при каждом вызове представления. Может кто-нибудь подскажет мне правильное направление? Спасибо!!!

import threading as th

def hello():
    print("hello, world")


def webhook(request):
   
   tm = th.Timer(3600, hello)
    
    if request.method == 'POST' and not tm.is_alive():
        
        tm.start()
        
        code_to.ecexute()

        return HttpResponse("Webhook received!")

Ваш таймер сбрасывается каждый раз, потому что он находится внутри функции, которая выполняется каждый раз, когда выполняется запрос. Вы должны попытаться установить таймер глобально, например, вне вашей функции. (имейте в виду, когда ваш скрипт будет запущен повторно, таймер будет сброшен снова).

import threading as th

def hello():
    print("hello, world")

tm = None

def webhook(request):
   
    # check here if timer is dead then process the request.
    if timer_is_dead || tm is None:
        
        # accessing global value and setting it for first time
        if tm is None:
            global tm
            tm =  th.Timer(3600, hello)
            tm.start()
        
        if request.method == 'POST' and not tm.is_alive():
     
            code_to.ecexute()

            # start timer again for next hour
            
            return HttpResponse("Webhook received!")
    else:
        return HttResponse("Not Allowed")

Edit: Обработка первого запроса, а затем запуск таймера

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

Спасибо за все предложения!!!

def webhook2 (request):
    today = datetime.now().date()
    with open('timestamp.txt') as f:
        tstamp = f.read()
        last_run = datetime.strptime(tstamp, '%Y-%m-%d')
        last_run_date = datetime.date(last_run)
        print ("last run: " + str(last_run_date))
        

    if last_run_date < today:

        
        file = open("timestamp.txt" ,"w")
        file.write(str(today))
        file.close()

        if request.method == 'POST':
            msg = str(request.body)
            final_msg=msg[2:-1]
            print("Data received from Webhook is: ", request.body)

            # creates a google calendar event
            function_logic()

            return HttpResponse("Webhook received! Event added to calendar")
    
    
    else:
        print ("we already have a record for today")

        return HttpResponse("Not adding a record. We already have one for today.")```
Вернуться на верх