• 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?

Object Storage Arubacloud
0 głosów
168 wizyt
pytanie zadane 5 października 2020 w Python przez Dzango111 Użytkownik (660 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 Ekspert (345,620 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 (660 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 Ekspert (345,620 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 (660 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 Ekspert (345,620 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 (660 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 Ekspert (345,620 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 (212,870 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ź 445 wizyt
pytanie zadane 12 sierpnia 2018 w C i C++ przez Slegnawierzchowcu Użytkownik (860 p.)
0 głosów
2 odpowiedzi 1,761 wizyt
pytanie zadane 23 marca 2018 w Python przez aleksandraa Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 262 wizyt

92,655 zapytań

141,546 odpowiedzi

319,984 komentarzy

62,024 pasjonatów

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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...