• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czy da się wywołać funkcje z views?

0 głosów
380 wizyt
pytanie zadane 5 października 2020 w Python przez Dzango111 Użytkownik (670 p.)

Czy mogę zrobić coś takiego:

widok

def bazarek(request):
    x_nas = Roslina.objects.get(id=3)
    monety = (kod sqla)
    #widok

    def odejmij():
        monety - x_nas.wartosc
        return monety.save()
        #funkcja, którą chce wywołać

templatka html

{{ odejmij }}

Dodam, że chciałbym do kodu przenieść np takie komendy, które w shellu działają:

#>>> obj = Gracz.objects.get(id=25)
#>>> obj.saldo += 100
#>>> obj.save()

 

komentarz 5 października 2020 przez adrian17 Mentor (354,880 p.)
Niezbyt rozumiem co chcesz zrobić... chcesz, żeby odejmij() się wykonywało podczas generowania template'u? Ale po co, jak możesz to po prostu w kodzie widoku zrobić?
komentarz 5 października 2020 przez Dzango111 Użytkownik (670 p.)

W template jest button, który po wciśnięciu ma wywołać {{odejmij}}

$(document).on("click", ".popover .kup" , function(){
                {{odejmij}}
                alert("Kupiłeś roślinę")
                $(this).parents(".popover").popover('hide');
 });

 

komentarz 5 października 2020 przez adrian17 Mentor (354,880 p.)
...nie, to tak nie działa. Nie możesz po prostu wrzucić funkcji Pythona w środek JSa.

Backend i frontend to niezależne światy. Przeglądarka musi poinformować serwer, że ma coś zrobić. Poczytaj np o AJAXie.

(Poza tym, zazwyczaj ogólnie nie umieszcza się żadnego JSa w template'ach)
komentarz 8 października 2020 przez Dzango111 Użytkownik (670 p.)
Z AJAXa trochę korzystałem, ale prawdę mówiąc, nie bardzo rozumiem po co miałbym go używać w tym przypadku. Wciśnięty button rzeczywiście nie reaguje na {{odejmij}} i choć przyjmuję do wiadomości, że jest to po prostu źle zrobione, to nie rozumiem dlaczego. Wcześniej wydawało mi się, że to przez złe wywoływanie funkcji z widoku.
komentarz 8 października 2020 przez adrian17 Mentor (354,880 p.)

nie bardzo rozumiem po co miałbym go używać w tym przypadku

Napisałeś w Pythonie funkcję odejmij(). Ta funkcja siedzi po stronie serwera. Guzik jest po stronie przeglądarki.

Więc serwer musi skądś wiedzieć, że guzik w przeglądarce został wciśnięty.

Więc przeglądarka musi wysłać tą informację do serwera zapytaniem HTTP - stąd AJAX.

komentarz 10 października 2020 przez Dzango111 Użytkownik (670 p.)
Już chyba rozumiem. Czy dobrym pomysłem byłoby wykorzystać w tym przypadku Django REST? Jeszcze nie miałem z nim styczności, ale chyba do takich zastosowań się nadaje.
komentarz 10 października 2020 przez adrian17 Mentor (354,880 p.)

Django REST Framework jest całkiem popularny do budowania większych API restowych, ale... to zdecydowanie armata na wróble, jeśli piszesz zwykły endpoint na cele AJAXa. Osobiście w ogóle go nie używałem, jeśli nie pisałem dedykowanego API dla klientów zewnętrznych.

1 odpowiedź

0 głosów
odpowiedź 5 października 2020 przez Ehlert Ekspert (215,070 p.)
Najlepiej jest pozamykać poszczególne funkcjonalności w funkcjach/serwisach. Przy czym dobrze aby ich definicje były w oddzielnych plikach. Wtedy w widoku robisz import i normalne wywołanie.

Podobne pytania

0 głosów
1 odpowiedź 978 wizyt
pytanie zadane 12 sierpnia 2018 w C i C++ przez Slegnawierzchowcu Użytkownik (860 p.)
0 głosów
2 odpowiedzi 2,069 wizyt
pytanie zadane 23 marca 2018 w Python przez aleksandraa Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 536 wizyt

93,631 zapytań

142,553 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1811p. - rafalszastok
  13. 1600p. - Rafał Trójniak
  14. 1588p. - Tomasz Bielak
  15. 1494p. - ssynowiec
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...