2011-07-22 11 views
5

Obecnie pracuję nad projektem wykorzystującym Django 1.3 z aplikacją Django-Celery. To niesamowite, proponuję każdemu, kto nie zna selera, sprawdzić.Django-Celery - Prześlij zadania ponownie ze strony administratora?

Mam konkretne pytanie wokół funkcjonalności strony Admin:

używamy zadania seler dokonać relaksującego wywołań API do partnerów zewnętrznych. Te wywołania są w rzeczywistości uruchamiane przez akcję użytkownika, więc możesz zobaczyć, w jaki sposób zadanie selera byłoby w tym przypadku niezwykle przydatne.

Mamy historię użytkownika wokół jak administrator powinien mieć możliwość ponownego wysłania zwrotnego, jeśli nie powiedzie się z jakiegoś powodu. Teraz, jeśli wywołanie zwrotne nie powiedzie się ze standardową awarią odpowiedzi HTTP, używamy mechanizmu ponawiania selera, aby automatycznie ponownie wysyłać je w różnych odstępach czasu. Jednak te callbacki mogą należeć do jednego z tysięcy partnerów (tak, jest ich wiele) i nie wszystkie z nich będą używać standardowego kodu odpowiedzi HTTP jako odpowiedzi na niepowodzenie.

Krótko mówiąc, nie byłem w stanie znaleźć coś online, które stwierdza, że ​​można ponownie wysłać zadanie seler poprzez interfejs administratora. Miałem nadzieję, że ktoś może rzucić trochę światła na to. Wydaje się, że jest to dość oczywisty element funkcjonalności, a jeśli nie ma takiej funkcjonalności, jestem pewien, że jest ku temu dobry powód. Byłbym zachwycony, gdyby nie było sposobu, żeby to zrobić, gdyby ktoś mógł wyjaśnić powód. Chciałbym dowiedzieć się więcej o wewnętrznych procesach selera.

Dziękuję wszystkim! Przepraszam za moją słowność, czasami mam tendencję do włóczęgi.

+0

BTW - na marginesie, jeśli nie jest to sposób, aby ponownie wysłać zadania, będę realizacji jednego siebie w admin. W tym celu muszę przechowywać argumenty przetrawione w DB. Czy ktoś wie, czy istnieje sposób w Pythona, aby uzyskać krotki argumentów przekazanych oprócz ręcznego tworzenia? To jest coś, co mnie interesuje. Przepraszam, wiem, że łamie zasadę dwóch pytań w jednym poście ... ale technicznie to jest komentarz, więc pomyślałem, że będę bezpieczny, hehe. – jnadro52

+0

Dla zapytania arg, utwórz funkcję jako "def myFunc (* args)" wszelkie przekazane argumenty będą w krotce "args". – aid

+0

Rozumiem, więc jeśli dodaję * args do metody, wszystkie przekazane argumenty będą na liście argumentów. Znałem tę funkcję, ale nie zdawałem sobie sprawy, że zadziałało w ten sposób, z już zdefiniowanymi argumentami niebędącymi słowami kluczowymi. Dzięki za pomoc! – jnadro52

Odpowiedz

2

Można spróbować dwa podejścia,

1: mała siekać w modelu

Można użyć pola logiczną i nazwisko to coś celery_retry aw modelach zapisać sposób zrobić coś takiego.

def save(self, *args, **kwargs): 
    if self.celery_retry and self.user.is_superuser(): 
      celery_task.apply_async() 
    self.celery_retry = False 
    super(MyModel, self).save(*args, **kwargs) 

To tylko pomysł, możesz sam określić, jak i kiedy złożyć zadanie selerowe.

2: Rozszerzenie administratora szablonu:

można rozszerzyć szablon administratora i umieścić w hiperłącze do widoku, który ponownie przesłać zadanie.

+0

Dzięki za odpowiedź ... skończyło się na zrobieniu # 1. Szukałem więcej wbudowanej metody. Wydawało się, że to coś, co zostanie uwzględnione podczas oglądania obecnego zestawu funkcji. Tak czy inaczej, jest to poprawna odpowiedź, więc daję ci ładny zielony znacznik wyboru. – jnadro52