Pracuję na serwerze WWW django, na którym inny komputer (ze znanym adresem IP) może załadować arkusz kalkulacyjny na mój serwer WWW. Po zaktualizowaniu arkusza kalkulacyjnego w wersji chcę wywołać niektóre przetwarzanie/sprawdzanie poprawności/analizę w arkuszu kalkulacyjnym (co może zająć> 5 minut - zbyt długo, aby drugi serwer mógł rozsądnie poczekać na odpowiedź), a następnie wysłać drugie maszyna (ze znanym adresem IP) HttpResponse wskazująca, że przetwarzanie danych zostało zakończone.funkcja wyzwalacza po zwróceniu HttpResponse z widoku django
Zdaję sobie sprawę, że nie można zrobić processing.data()
po powrocie się HttpResponse
, ale funkcjonalnie chcę kod, który wygląda mniej więcej tak:
# processing.py
def spreadsheet(*args, **kwargs):
print "[robot voice] processing spreadsheet........."
views.finished_processing_spreadsheet()
# views.py
def upload_spreadsheet(request):
print "save the spreadsheet somewhere"
return HttpResponse("started processing spreadsheet")
processing.data()
def finished_processing_spreadsheet():
print "send good news to other server (with known IP)"
wiem jak napisać każdą funkcję indywidualnie, ale jak mogę skutecznie zadzwoń pod numer processing.data()
po tym, jakviews.upload_spreadsheet
zwrócił odpowiedź?
Próbowałem używać django's request_finished
signaling framework, ale to nie wywołuje metody processing.spreadsheet()
po zwrocie HttpResponse
. Próbowałem użyć dekoratora na views.upload_spreadsheet
z tym samym problemem.
Mam przeczucie, że może to mieć coś wspólnego z pisaniem middleware lub prawdopodobnie custom class-based view, z których żadne nie mam żadnego doświadczenia, więc pomyślałem, że postawię pytanie wszechświatowi w poszukiwaniu jakiejś pomocy.
Dzięki za pomoc!
Dziękuję za wyjaśnienie, dlaczego jest to konieczne, Cristophe. Opierając się na twoim i jpicowym wyjaśnieniu, myślę, że sprawdzę selera po tym, jak trochę dłużej będę spać. – dino