Przesłanie danych ze strony do servera, dzjango.

0

Cześć,
obecnie tworzę aplikację w django i potrzebuję przesłać dane ze strony do aplikacji, po określonym wydarzeniu na stronie. Tzn zachodzi na stronie zdarzenie E i w odpowiedzi na nie kod w js liczy mi pewne "statystyki" i te statystyki chcę zapisać do bazy danych i jeszcze wyświetlić je użytkownikowi. Nie wiem za bardzo jak to mogę w ładny spsoób zrobić, liczę na jakieś wskazówki. Niesety nie mogę udostępnić kodu nad którym pracuję.

1

A gdzie dokładnie masz problem? W backendzie robisz jakis endpoint który przyjmuje dane i je zapisuje, a JS robisz ajaxowy request pod ten endpoint.

0

W sumie taka odpowiedz mi wystarcza, nie wiem dlaczego ale w głowie miałem użycie jakiego modelu/formy dla niego. Pewnie jak zwykle zobie za bardzo chciałem skomplikować zadanie. A rzcuciłem okiem na podany przez Ciebie spoób i wyglada że jest to dokładnie to czego szukam.

0

Ja bym się tu tylko zastanowił czy faktycznie chcesz "liczyć coś" po stronie klienta i potem to zapisywać. Po pierwsze bo userzy nie lubią jak mulisz im komputer, po drugie dlatego że user może wysłać dowolne dane na ten endpoint w takim układzie. W tym jakieś lewe spreparowane dane!

0

Tam dużo liczenia nie ma, praktycznie zsumowanie paru liczb więc to nie będzie problemem. Co do lewych danych to już by mnie bardziej bolało ale i tak nie było tragiczne bo te dane będa sobie po prostu leżały i nic się nie będzie działo z nimi. Ale jak już coś robię to fajnie żeby to było dobrze zrobione, więc jakaś wskazówka jak to zrobić bezpiecznie? Bo niezależnie jak to będę wysyłał to użytkownik może zobie te dane zmodyfikować

1

Zasada jest prosta. Backend odpowiada za walidację i spójność danych. Nigdy, ale to nigdy nie powinieneś przerzucać tego na stronę klienta i opierać się na zaufaniu. Jeśli klient będzie miał możliwość przesłania i zapisania do DB "lewych" danych to musisz zakładac że tak będzie (trzymanie niepoprawnych danych w DB jest bezsensowne). Jeśli to faktycznie kwestia przeliczenia czegoś i zwrócenia wyniku to po co chcesz zapisywać to DB? Jeśli masz zamiar to jakoś w przyszłości wykorzystać do przykładowo przeliczania czegoś innego, statystyk itp. to musisz przerzucić na backend walidację wprowadzonych danych wejściowych oraz przeliczenie wyniku. W Django możesz to zarobić przykładowo za pomocą endpointa restowego, fromularza czy nawet odpowiednio przygotowanego urla z parametrami. Trochę możliwości jest.

0

Trzeba w takim wypadku:

  • Albo liczyć to po stronie serwera a na front tylko zwracać userowi wyniki do pokazania (wtedy user w ogóle nie ma kontroli nad tym)
  • Albo walidować przychodzące requesty i sprawdzać czy ktoś nie wysłał nam czegoś głupiego (to moze być trudne do zweryfikowania)
0

Sprawę sobie rozwiązałem w ten sposób:

  • po zakończeniu akcji ze strony wysyłam request do przygotowanego endpointa (dane przekazuję w url)
  • backend liczy sobie potrzebne dane, zapisuję potrzebne rzeczy
  • wynik wysyła użytkownikowi.
    Co do potrzeby trzymania danych, rzecz tyczy się czegoś w rodzaju "gry" i pasuje żeby użytkownik miał wiedzę na to ile punktów już zdobył, jakie ma osiągnięcia itp.
    Bo jeśli miałbym to robić tylko po to żeby pokazać wynik (tzn, wysłać wszystko na backend, policzyć, zapisać w DB i pokazać wynik bez konieczności zapamiętywania "historii" zdarzeń) to zrobienie tego w ten sposób jest bez sensu, no mogę powiedzieć że nawet głupie. Bo w takim przypadku wystarczyło by pokazanie jakiegoś okienka z informacją, dopisanie wyniku na stronie (cokolwiek).
0

rzecz tyczy się czegoś w rodzaju "gry"

Tylko czy teraz user nie może zwyczajnie oszukiwać w tej grze? :) Pamiętaj że on nie jest ograniczony przez twój javascript który może cośtam walidować! User może wysłać dowolny request do serwera.

0

Najlepiej jak cały "silnik" gry jest na serwerze, a po stronie klienta jest tylko interface do komunikowania się z nim. Użytkownik nie ma wtedy możliwości oszukiwania, bo wszystko wyliczane jest po stronie serwera.

0

Tak może oszukiwać - zawałem sobie sprawę od początku jednak na razie pisałem to "testowo" - byle działo. Teraz skupiam się nad poprawkami i chcę zrobić tak żeby użyszkodnik nie miał szans na oszukanie. Ale za bardzo nie mam pomysłu jak się zabrać za to. Wiem że tak jak już ktoś wspomniał "silnik" na serwerze i komunikacja z nim - ale nie wiem jak to zrealizować, mogę liczyć an jakieś wskazówki?

1 użytkowników online, w tym zalogowanych: 0, gości: 1