2009-10-10 7 views
6

Mam funkcję kontrolowaną przez administratora (importowanie bazy danych), która może trochę potrwać do końca, więc chcę w tym czasie wyświetlić pewne informacje zwrotne dla użytkownika - na przykład pasek postępu lub tylko niektóre wiadomości. Nawet wysłanie strony w częściach podczas długiego działania byłoby wystarczające.Django - postęp akcji wyświetlania

Jaki byłby najprostszy sposób na zrobienie tego w Django?

+0

dlaczego nie pasek postępu? .. można opracować trochę, Proszę? – 0100110010101

+0

Pasek postępu też byłby OK, ale nie wiem, jak mogłem go kontrolować z funkcji wykonującej akcję – hmp

Odpowiedz

1

Nie można tego zrobić bez skryptów po stronie klienta, np. Ajax. Potrzebujesz czegoś, co będzie odpytywać serwer w regularnych odstępach czasu i wyświetlać odpowiedź użytkownikowi. Jest a snippet, który pokazuje, jak można to zrobić.

Oczywiście, aby było to możliwe, trzeba również odciąć importowanie do procesu off-line. Spowoduje to import i zapisze jego postępy gdzieś regularnie (w pliku lub bazie danych), aby Ajax mógł go przesłać. Dobrym sposobem na to może być użycie celery, opartej na Django kolejki zadań rozproszonych.

Wreszcie, potrzebujesz prostego widoku, który wywoła Ajax, który wyszuka długotrwały proces (lub spojrzy na utworzony rekord postępu) i zgłosi się do klienta.

Tak, dość skomplikowane.

3
  1. Odpytywanie Ajax - Korzystanie z licznika czasu po stronie klienta powoduje ciągłe odpytywanie serwera o jego status. Proces wygląda następująco: Użytkownik konfiguruje szczegóły bazy danych i "upload" trafień. Przesyłanie plików i żądanie strony uruchamia proces asynchroniczny na serwerze w celu przeprowadzenia importu bazy danych. Kiedy użytkownik kliknie przycisk wysyłania, uruchamia zegar po stronie klienta, który w regularnych odstępach czasu wysyła żądanie AJAX do serwera, aby zapytać o jego postępy. Serwer zwraca JSON, a skrypt po stronie klienta określa, co chce z nim zrobić.

  2. COMET - Nie jestem tak obeznany z tym, ale tradycyjna AJAX działa przez klienta wysyłającego żądanie do serwera. Jest znany jako komunikacja "ciągnij". W COMET to push. Serwer przekazuje dane do klienta o jego postępie, nawet jeśli serwer o to nie poprosił. Stwarza to sytuację przy mniejszym obciążeniu serwera niż pobieranie. Google wyświetla niektóre wyniki dla osób korzystających z COMET with Django.

  3. Reverse AJAX - Podobny do COMET. Reverse Ajax with Django.

(ja przepraszam, wiem, że co najmniej około 2 ostatnio, ale pomyślałem przynajmniej lubią wiedzieć, że istnieją)

Powiązane problemy