Django przekazujące dane między widokami

Zastanawiałem się, jaki jest "najlepszy" sposób przekazywania danych między widokami. Czy lepiej jest utworzyć niewidoczne pola i przekazać je za pomocą posta, czy powinienem zakodować je w moich adresach URL? A może jest na to lepszy/łatwiejszy sposób? Sorry jeśli to pytanie jest głupie, jestem całkiem nowy w programowaniu stron internetowych:)

Thanks

Author: Srikar Appalaraju, 2011-10-14

1 answers

Istnieją różne sposoby przekazywania danych między widokami. W rzeczywistości nie różni się to zbytnio tym, że problem przekazywania danych między różnymi skryptami 2 i oczywiście niektóre koncepcje komunikacji między procesami również wchodzą. Niektóre rzeczy, które przychodzą na myśl to -

  1. GET request - pierwsze żądanie trafia view1 -> wyślij dane do przeglądarki - > przekierowanie przeglądarki do view2
  2. POST request - (Jak sugerowałeś) taki sam przepływ jak powyżej, ale jest odpowiedni, gdy więcej danych jest zaangażowany
  3. zmienne sesji Django - jest to najprostsza implementacja
  4. Pliki cookie po stronie klienta - mogą być używane, ale istnieją ograniczenia dotyczące ilości danych, które mogą być przechowywane.
  5. dzielona pamięć na poziomie serwera www - trudne, ale można to zrobić.
  6. REST API 's - Jeśli możesz mieć samodzielny serwer, to ten serwer może REST API' s wywoływać widoki.
  7. kolejki wiadomości - Ponownie, jeśli istnieje możliwość samodzielnego serwera, może nawet kolejki wiadomości będą działać. tzn. pierwszy widok (API) pobiera żądania i wypycha je do kolejki, a jakiś inny proces może wyskakiwać wiadomości i uderzać w drugi widok (inny API). To uniezależniłoby API pierwszego i drugiego widoku i prawdopodobnie lepiej zarządzałoby ładowaniem.
  8. Cache - może pamięć podręczna taka jak memcached może działać jako mediator. Ale jeśli ktoś idzie tą drogą, lepiej jest użyć sesji Django, ponieważ ukrywa wiele szczegółów implementacji, ale jeśli skala jest problemem, memcached lub redis są dobrymi opcjami.
  9. Persistent storage - przechowuje dane w jakimś trwałym mechanizmie przechowywania, takim jak mysql. To oddziela twoje żądanie biorące udział (prawdopodobnie klient skierowany do API) od przetwarzania części przez posiadanie DB w środku.
  10. NoSQL Storage - jeśli prędkość zapisu jest w innej kolejności rzędu setek tysięcy na sekundę, to wydajność MySql stanie się wąskim gardłem (są sposoby na obejście, poprawiając konfigurację mysql, ale jej nie łatwe). Wtedy rozważenie NoSQL DB może być alternatywą. np.: dynamoDB, Redis, HBase itp.
  11. przetwarzanie strumienia - Jak Storm lub AWS Kinesis może być opcją, jeśli twój przypadek użycia to obliczenia w czasie rzeczywistym. W rzeczywistości możesz użyć AWS Lambda w środku jako bezserwerowego modułu obliczeniowego, który odczyta i wywoła twój drugi widok API.
  12. zapisuje dane do pliku - wtedy następny Widok może odczytać z tego pliku (naprawdę brzydki). Prawdopodobnie nigdy nie powinno się tego robić, ale umieszczając ten punkt tutaj jako coś, czego nie należy robić.

Nie mogę myśleć o niczym więcej. Zaktualizuje się, jeśli coś dostanę. Mam nadzieję, że to w jakiś sposób pomoże.

 55
Author: Srikar Appalaraju,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-28 03:44:52