Przypomnijmy fragment schematu naszej bazy danych:

R1OVlSTVOzUU5
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Obsługa zamówień wymagała będzie operacji na tabelach zamowienia, daniasklady_zamowien.

Lista zamówień

Polecenie 1

Załączone poniżej archiwum zawiera katalog restauracja z kodem aplikacji Restauracja obsługującej operacje na tabelach daniaklienci. Pobierz i rozpakuj archiwum.

Do dalszej pracy zalecamy utworzenie projektu w środowisku programistycznym PyCharm i używanie tego środowiska programistycznego IDE.

R1V1BbQzLwTU5

Przycisk z napisem Pobierz załącznik, którego naciśnięcie pobiera plik restauracja_v2.zp.

Plik ZIP o rozmiarze 9.20 KB w języku polskim

Kod obsługujący zamówienia umieszczamy w pliku zamowienia.py, który dodajemy do katalogu aplikacji. Na początku dodamy widok zwracający listę zamówień oraz nagłówki widoków obsługujących pozostałe operacje.

Linia 1. from flask import otwórz nawias okrągły. Linia 2. Blueprint przecinek flash przecinek redirect przecinek render podkreślnik template przecinek request przecinek url podkreślnik for. Linia 3. zamknij nawias okrągły. Linia 4. from db import get podkreślnik db. Linia 5. from werkzeug kropka exceptions import abort. Linia 6. from datetime import datetime. Linia 8. bp znak równości Blueprint otwórz nawias okrągły apostrof zamowienia apostrof przecinek podkreślnik podkreślnik name podkreślnik podkreślnik przecinek url podkreślnik prefix znak równości apostrof prawy ukośnik zamowienia apostrof zamknij nawias okrągły. Linia 11. at bp kropka route otwórz nawias okrągły apostrof prawy ukośnik lista apostrof zamknij nawias okrągły. Linia 12. def lista otwórz nawias okrągły zamknij nawias okrągły dwukropek. Linia 13. dane znak równości get podkreślnik db otwórz nawias okrągły zamknij nawias okrągły kropka execute otwórz nawias okrągły cudzysłów cudzysłów cudzysłów. Linia 14. SELECT z kropka asterysk przecinek k kropka asterysk FROM zamowienia z. Linia 15. INNER JOIN klienci k ON z kropka id podkreślnik klienta znak równości k kropka id. Linia 16. ORDER BY z kropka data. Linia 17. cudzysłów cudzysłów cudzysłów zamknij nawias okrągły kropka fetchall otwórz nawias okrągły zamknij nawias okrągły. Linia 18. if not dane dwukropek. Linia 19. flash otwórz nawias okrągły apostrof Brak zamówień wykrzyknik apostrof zamknij nawias okrągły. Linia 20. return render podkreślnik template otwórz nawias okrągły apostrof zamowienia podkreślnik lista kropka html apostrof przecinek dane znak równości dane zamknij nawias okrągły. Linia 23. at bp kropka route otwórz nawias okrągły apostrof prawy ukośnik dodaj apostrof przecinek methods znak równości otwórz nawias kwadratowy apostrof GET apostrof przecinek apostrof POST apostrof zamknij nawias kwadratowy zamknij nawias okrągły. Linia 24. def dodaj otwórz nawias okrągły zamknij nawias okrągły dwukropek. Linia 25. pass. Linia 28. def get podkreślnik zamowienia otwórz nawias okrągły z podkreślnik id zamknij nawias okrągły dwukropek. Linia 29. pass. Linia 31. at bp kropka route otwórz nawias okrągły apostrof prawy ukośnik otwórz nawias ostrokątny int dwukropek z podkreślnik id zamknij nawias ostrokątny prawy ukośnik edytuj apostrof przecinek methods znak równości otwórz nawias kwadratowy apostrof GET apostrof przecinek apostrof POST apostrof zamknij nawias kwadratowy zamknij nawias okrągły. Linia 32. def edytuj otwórz nawias okrągły z podkreślnik id zamknij nawias okrągły dwukropek. Linia 33. pass. Linia 36. at bp kropka route otwórz nawias okrągły apostrof prawy ukośnik usun prawy ukośnik otwórz nawias ostrokątny int dwukropek z podkreślnik id zamknij nawias ostrokątny apostrof przecinek methods znak równości otwórz nawias kwadratowy apostrof GET apostrof przecinek apostrof POST apostrof zamknij nawias kwadratowy zamknij nawias okrągły. Linia 37. def usun otwórz nawias okrągły z podkreślnik id zamknij nawias okrągły dwukropek. Linia 38. pass.

Funkcja lista() wywoływana będzie dla adresu /zamowienia/lista. Do wybrania zamówień użyjemy zapytania SQL pobierającego dane z tabel zamówieniaklienci na podstawie dopasowania identyfikatora klienta:

Linia 1. SELECT z kropka asterysk przecinek k kropka asterysk FROM zamowienia z. Linia 2. INNER JOIN klienci k ON z kropka id podkreślnik klienta znak równości k kropka id. Linia 3. ORDER BY z kropka data.

Pobrane dane przekażemy do szablonu zamowienia_lista.html, który umieszczamy w katalogu templates:

Linia 1. otwórz nawias klamrowy procent extends cudzysłów base kropka html cudzysłów procent zamknij nawias klamrowy. Linia 2. otwórz nawias klamrowy procent block podtytul procent zamknij nawias klamrowy Zamówienia otwórz nawias klamrowy procent endblock procent zamknij nawias klamrowy. Linia 4. otwórz nawias klamrowy procent block tresc procent zamknij nawias klamrowy. Linia 5. otwórz nawias ostrokątny ol zamknij nawias ostrokątny. Linia 6. otwórz nawias klamrowy procent for rekord in dane procent zamknij nawias klamrowy. Linia 7. otwórz nawias ostrokątny li zamknij nawias ostrokątny otwórz nawias klamrowy otwórz nawias klamrowy rekord kropka imie zamknij nawias klamrowy zamknij nawias klamrowy przecinek otwórz nawias klamrowy otwórz nawias klamrowy rekord kropka nazwisko zamknij nawias klamrowy zamknij nawias klamrowy przecinek otwórz nawias klamrowy otwórz nawias klamrowy rekord kropka data zamknij nawias klamrowy zamknij nawias klamrowy –. Linia 8. otwórz nawias ostrokątny a href znak równości cudzysłów otwórz nawias klamrowy otwórz nawias klamrowy url podkreślnik for otwórz nawias okrągły apostrof zamowienia kropka edytuj apostrof przecinek z podkreślnik id znak równości rekord kropka id zamknij nawias okrągły zamknij nawias klamrowy zamknij nawias klamrowy cudzysłów zamknij nawias ostrokątny Edytuj otwórz nawias ostrokątny prawy ukośnik a zamknij nawias ostrokątny przecinek. Linia 9. otwórz nawias ostrokątny a href znak równości cudzysłów otwórz nawias klamrowy otwórz nawias klamrowy url podkreślnik for otwórz nawias okrągły apostrof zamowienia kropka usun apostrof przecinek z podkreślnik id znak równości rekord kropka id zamknij nawias okrągły zamknij nawias klamrowy zamknij nawias klamrowy cudzysłów zamknij nawias ostrokątny Usuń otwórz nawias ostrokątny prawy ukośnik a zamknij nawias ostrokątny. Linia 10. otwórz nawias ostrokątny prawy ukośnik li zamknij nawias ostrokątny. Linia 11. otwórz nawias klamrowy procent endfor procent zamknij nawias klamrowy. Linia 12. otwórz nawias ostrokątny prawy ukośnik ol zamknij nawias ostrokątny. Linia 13. otwórz nawias ostrokątny p zamknij nawias ostrokątny otwórz nawias ostrokątny a href znak równości cudzysłów otwórz nawias klamrowy otwórz nawias klamrowy url podkreślnik for otwórz nawias okrągły apostrof zamowienia kropka dodaj apostrof zamknij nawias okrągły zamknij nawias klamrowy zamknij nawias klamrowy cudzysłów zamknij nawias ostrokątny Dodaj zamówienie otwórz nawias ostrokątny prawy ukośnik a zamknij nawias ostrokątny otwórz nawias ostrokątny prawy ukośnik p zamknij nawias ostrokątny. Linia 14. otwórz nawias klamrowy procent endblock procent zamknij nawias klamrowy.

Tagi występujące w powyższym szablonie oraz funkcja url_for() omówione zostały w poprzednim e‑materiale.

Ćwiczenie 1

Zarejestruj projekt zamowienia w aplikacji. Dodaj link „Zamówienia” do menu w szablonie bazowym. Uruchom aplikację i wejdź na adres zamowienia/lista.

Dodawanie zamówień

Tym razem zaczniemy od przygotowania szablonu zamowienie_dodaj.html. Będzie on zawierał bardziej rozbudowany formularz niż te, z których korzystaliśmy do tej pory:

Linia 1. otwórz nawias klamrowy procent extends cudzysłów base kropka html cudzysłów procent zamknij nawias klamrowy. Linia 2. otwórz nawias klamrowy procent block podtytul procent zamknij nawias klamrowy Zamówienie – dodawanie otwórz nawias klamrowy procent endblock procent zamknij nawias klamrowy. Linia 4. otwórz nawias klamrowy procent block tresc procent zamknij nawias klamrowy. Linia 5. otwórz nawias ostrokątny form method znak równości cudzysłów POST cudzysłów action znak równości cudzysłów otwórz nawias klamrowy otwórz nawias klamrowy url podkreślnik for otwórz nawias okrągły apostrof zamowienia kropka dodaj apostrof zamknij nawias okrągły zamknij nawias klamrowy zamknij nawias klamrowy cudzysłów zamknij nawias ostrokątny. Linia 6. otwórz nawias ostrokątny label for znak równości cudzysłów klient cudzysłów zamknij nawias ostrokątny Klient dwukropek otwórz nawias ostrokątny prawy ukośnik label zamknij nawias ostrokątny. Linia 7. otwórz nawias ostrokątny select name znak równości cudzysłów klient cudzysłów id znak równości cudzysłów klient cudzysłów required zamknij nawias ostrokątny. Linia 8. otwórz nawias ostrokątny option value znak równości cudzysłów cudzysłów zamknij nawias ostrokątny Wybierz klienta kropka kropka kropka otwórz nawias ostrokątny prawy ukośnik option zamknij nawias ostrokątny. Linia 9. otwórz nawias klamrowy procent for k in klienci procent zamknij nawias klamrowy. Linia 10. otwórz nawias ostrokątny option value znak równości cudzysłów otwórz nawias klamrowy otwórz nawias klamrowy k kropka id zamknij nawias klamrowy zamknij nawias klamrowy cudzysłów zamknij nawias ostrokątny otwórz nawias klamrowy otwórz nawias klamrowy k kropka imie zamknij nawias klamrowy zamknij nawias klamrowy otwórz nawias klamrowy otwórz nawias klamrowy k kropka nazwisko zamknij nawias klamrowy zamknij nawias klamrowy otwórz nawias ostrokątny prawy ukośnik option zamknij nawias ostrokątny. Linia 11. otwórz nawias klamrowy procent endfor procent zamknij nawias klamrowy. Linia 12. otwórz nawias ostrokątny prawy ukośnik select zamknij nawias ostrokątny. Linia 13. otwórz nawias ostrokątny br zamknij nawias ostrokątny. Linia 14. otwórz nawias ostrokątny label for znak równości cudzysłów data cudzysłów zamknij nawias ostrokątny Data przecinek godzina dwukropek otwórz nawias ostrokątny prawy ukośnik label zamknij nawias ostrokątny. Linia 15. otwórz nawias ostrokątny input type znak równości cudzysłów datetime minus local cudzysłów id znak równości cudzysłów data cudzysłów name znak równości cudzysłów data cudzysłów value znak równości cudzysłów otwórz nawias klamrowy otwórz nawias klamrowy dzis zamknij nawias klamrowy zamknij nawias klamrowy cudzysłów required zamknij nawias ostrokątny. Linia 16. otwórz nawias ostrokątny br zamknij nawias ostrokątny. Linia 17. otwórz nawias ostrokątny fieldset zamknij nawias ostrokątny. Linia 18. otwórz nawias ostrokątny legend zamknij nawias ostrokątny Dania otwórz nawias ostrokątny prawy ukośnik legend zamknij nawias ostrokątny. Linia 19. otwórz nawias ostrokątny p zamknij nawias ostrokątny Zaznacz dania dwukropek otwórz nawias ostrokątny prawy ukośnik p zamknij nawias ostrokątny. Linia 20. otwórz nawias klamrowy procent for d in dania procent zamknij nawias klamrowy. Linia 21. otwórz nawias ostrokątny div style znak równości cudzysłów white minus space dwukropek nowrap cudzysłów zamknij nawias ostrokątny. Linia 22. otwórz nawias ostrokątny input type znak równości cudzysłów checkbox cudzysłów name znak równości cudzysłów dania cudzysłów value znak równości cudzysłów otwórz nawias klamrowy otwórz nawias klamrowy d kropka id zamknij nawias klamrowy zamknij nawias klamrowy cudzysłów zamknij nawias ostrokątny otwórz nawias klamrowy otwórz nawias klamrowy d kropka nazwa zamknij nawias klamrowy zamknij nawias klamrowy przecinek otwórz nawias klamrowy otwórz nawias klamrowy d kropka cena zamknij nawias klamrowy zamknij nawias klamrowy zł. Linia 23. otwórz nawias ostrokątny input type znak równości cudzysłów number cudzysłów name znak równości cudzysłów liczba otwórz nawias klamrowy otwórz nawias klamrowy d kropka id zamknij nawias klamrowy zamknij nawias klamrowy cudzysłów value znak równości cudzysłów 1 cudzysłów min znak równości cudzysłów 0 cudzysłów step znak równości cudzysłów 1 cudzysłów zamknij nawias ostrokątny. Linia 24. otwórz nawias ostrokątny prawy ukośnik div zamknij nawias ostrokątny. Linia 25. otwórz nawias klamrowy procent endfor procent zamknij nawias klamrowy. Linia 26. otwórz nawias ostrokątny prawy ukośnik fieldset zamknij nawias ostrokątny. Linia 27. otwórz nawias ostrokątny br zamknij nawias ostrokątny. Linia 28. otwórz nawias ostrokątny label for znak równości cudzysłów rabat cudzysłów zamknij nawias ostrokątny Rabat dwukropek otwórz nawias ostrokątny prawy ukośnik label zamknij nawias ostrokątny. Linia 29. otwórz nawias ostrokątny input type znak równości cudzysłów number cudzysłów id znak równości cudzysłów rabat cudzysłów name znak równości cudzysłów rabat cudzysłów value znak równości cudzysłów 0 cudzysłów step znak równości cudzysłów kropka 01 cudzysłów zamknij nawias ostrokątny. Linia 30. otwórz nawias ostrokątny button type znak równości cudzysłów submit cudzysłów zamknij nawias ostrokątny Dodaj otwórz nawias ostrokątny prawy ukośnik button zamknij nawias ostrokątny. Linia 31. otwórz nawias ostrokątny prawy ukośnik form zamknij nawias ostrokątny. Linia 32. otwórz nawias klamrowy procent endblock procent zamknij nawias klamrowy.

Podczas konstruowania formularza, dla każdej informacji, którą będzie wprowadzał użytkownik i którą będziemy chcieli zapisać w bazie, dobieramy kontrolki odpowiedniego typu, kierując się m.in. typem danych odpowiednich pól w tabelach bazy danych.

Najczęściej używamy znacznika <input>, który w zależności od wartości atrybutu type pozwala tworzyć różne kontrolki. Oto przykłady:

  • <input type="text" id="imie" name="imie" required> – kontrolka umożliwiająca wprowadzanie krótkiego tekstu,

  • <input type="password" id ="haslo" name="haslo" minlength="8" required> – taka sama kontrolka jak wyżej, ale przeznaczona dla haseł (zamiast tekstu wyświetlane są gwiazdki),

  • <input type="number" name="rabat" value="0" min=".01" step=".01"> – kontrolka umożliwiająca wprowadzanie danych numerycznych,

  • <input type="checkbox" name="dania" checked> – kwadratowe pole, które można zaznaczyć, używane w przypadku, gdy możemy wybrać wiele opcji,

  • <input type="radio" name="grupa" value="admin"> – okrągłe pole, które można zaznaczyć, wykorzystywane w sytuacji, gdy możemy wybrać tylko jedną opcję,

  • <input type="datetime‑local" name="data" min="{{ dzis }}" value="{{ dzis }}" required> – pole pozwalające na wyświetlanie daty i/lub czasu w formacie RRRR‑MM‑DD GG:MM:SS.

W znacznikach <input> używamy dodatkowych atrybutów, które w większości aktywują podstawowe mechanizmy walidacjiwalidacja danychwalidacji poprawności wprowadzanych danych, np:

  • required – oznacza, że wprowadzenie wartości jest wymagane,

  • minlength="8" – określa minimalną wymaganą liczbę znaków,

  • min=".01" – określa wymaganą wartość minimalną,

  • step=".01" – określa różnicę między kolejnymi wartościami numerycznymi,

  • checked – określa, że pole checkbox jest zaznaczone,

  • value="0" – pozwala podać wartość domyślną,

  • id – unikalny w obrębie dokumentu HTML identyfikator elementu.

Większość kontrolek występuje z etykietą:

Linia 1. otwórz nawias ostrokątny label for znak równości cudzysłów nazwa cudzysłów zamknij nawias ostrokątny etykieta pola otwórz nawias ostrokątny prawy ukośnik labe zamknij nawias ostrokątny.

Wartość atrybutu for powinna być taka sama jak identyfikator kontrolki zapisany w atrybucie id.

W podanym wyżej szablonie dodawania zamówień korzystamy także ze znacznika tworzącego rozwijalną listę klientów:

Linia 1. otwórz nawias ostrokątny select name znak równości cudzysłów klient cudzysłów id znak równości cudzysłów klient cudzysłów zamknij nawias ostrokątny. Linia 2. otwórz nawias ostrokątny option value znak równości cudzysłów k podkreślnik id1 cudzysłów zamknij nawias ostrokątny Klient 1 otwórz nawias ostrokątny prawy ukośnik option zamknij nawias ostrokątny. Linia 3. otwórz nawias ostrokątny option value znak równości cudzysłów k podkreślnik id2 cudzysłów zamknij nawias ostrokątny Klient 2 otwórz nawias ostrokątny prawy ukośnik option zamknij nawias ostrokątny. Linia 4. kropka kropka kropka. Linia 5. otwórz nawias ostrokątny prawy ukośnik select zamknij nawias ostrokątny.
Ważne!

Nazwa pojedynczej kontrolki podana w atrybucie name pozwala na odczytanie przesłanej wartości po stronie serwera. Dotyczy to również grupy pól typu radio o takiej samej nazwie, a także listy opcji znacznika <select>. Na serwer trafia wartość atrybutu value tylko z zaznaczonego pola lub wybranej pozycji listy.

Wszystkie dane przesłane z formularza w żądaniu typu POST dostępne są po stronie sewera w słowniku request.form. Aby odczytać wartość, podajemy nazwę pola formularza jako klucz słownika, np.: request.form['imie'].

W przypadku pól typu checkbox test if request.form['menu']: pozwala sprawdzić, czy pole zostało zaznaczone.

Jeżeli kilka kontrolek typu checkbox ma tę samą nazwę, np. dania, wartości podane w atrybucie value zaznaczonych kontrolek przesyłane są w postaci listy, którą po stronie serwera odczytujemy za pomocą metody getlist(), np.: request.form.getlist('dania').

W pliku zamowienia.py uzupełnimy kod widoku dodaj():

Linia 1. at bp kropka route otwórz nawias okrągły apostrof prawy ukośnik dodaj apostrof przecinek methods znak równości otwórz nawias kwadratowy apostrof GET apostrof przecinek apostrof POST apostrof zamknij nawias kwadratowy zamknij nawias okrągły. Linia 2. def dodaj otwórz nawias okrągły zamknij nawias okrągły dwukropek. Linia 3. db znak równości get podkreślnik db otwórz nawias okrągły zamknij nawias okrągły kropka cursor otwórz nawias okrągły zamknij nawias okrągły. Linia 4. if request kropka method znak równości znak równości apostrof POST apostrof dwukropek. Linia 5. if not request kropka form kropka getlist otwórz nawias okrągły apostrof dania apostrof zamknij nawias okrągły dwukropek. Linia 6. flash otwórz nawias okrągły cudzysłów Nie wybrano dań wykrzyknik cudzysłów zamknij nawias okrągły. Linia 7. else dwukropek. Linia 8. id podkreślnik klienta znak równości request kropka form otwórz nawias kwadratowy apostrof klient apostrof zamknij nawias kwadratowy. Linia 9. data znak równości datetime kropka strptime otwórz nawias okrągły request kropka form otwórz nawias kwadratowy apostrof data apostrof zamknij nawias kwadratowy przecinek apostrof procent Y minus procent m minus procent dT procent H dwukropek procent M apostrof zamknij nawias okrągły. Linia 10. rabat znak równości request kropka form otwórz nawias kwadratowy apostrof rabat apostrof zamknij nawias kwadratowy. Linia 12. db kropka execute otwórz nawias okrągły apostrof INSERT INTO zamowienia VALUES otwórz nawias okrągły znak zapytania przecinek znak zapytania przecinek znak zapytania przecinek znak zapytania zamknij nawias okrągły apostrof przecinek. Linia 13. otwórz nawias kwadratowy None przecinek id podkreślnik klienta przecinek data przecinek rabat zamknij nawias kwadratowy zamknij nawias okrągły. Linia 14. z podkreślnik id znak równości db kropka lastrowid. Linia 15. for d podkreślnik id in request kropka form kropka getlist otwórz nawias okrągły apostrof dania apostrof zamknij nawias okrągły dwukropek. Linia 16. liczba znak równości request kropka form otwórz nawias kwadratowy f apostrof liczba otwórz nawias klamrowy d podkreślnik id zamknij nawias klamrowy apostrof zamknij nawias kwadratowy. Linia 17. db kropka execute otwórz nawias okrągły apostrof INSERT INTO sklady podkreślnik zamowien VALUES otwórz nawias okrągły znak zapytania przecinek znak zapytania przecinek znak zapytania przecinek znak zapytania zamknij nawias okrągły apostrof przecinek. Linia 18. otwórz nawias kwadratowy None przecinek z podkreślnik id przecinek d podkreślnik id przecinek liczba zamknij nawias kwadratowy zamknij nawias okrągły. Linia 19. db kropka execute otwórz nawias okrągły apostrof COMMIT apostrof zamknij nawias okrągły. Linia 20. flash otwórz nawias okrągły f apostrof Dodano dane zamówienia id otwórz nawias klamrowy z podkreślnik id zamknij nawias klamrowy kropka apostrof zamknij nawias okrągły. Linia 22. return redirect otwórz nawias okrągły url podkreślnik for otwórz nawias okrągły apostrof zamowienia kropka lista apostrof zamknij nawias okrągły zamknij nawias okrągły. Linia 24. klienci znak równości db kropka execute otwórz nawias okrągły apostrof SELECT asterysk FROM klienci apostrof zamknij nawias okrągły kropka fetchall otwórz nawias okrągły zamknij nawias okrągły. Linia 25. dania znak równości db kropka execute otwórz nawias okrągły apostrof SELECT asterysk FROM dania WHERE menu IS TRUE apostrof zamknij nawias okrągły kropka fetchall otwórz nawias okrągły zamknij nawias okrągły. Linia 26. dzis znak równości datetime kropka now otwórz nawias okrągły zamknij nawias okrągły kropka strftime otwórz nawias okrągły apostrof procent Y minus procent m minus procent dT procent H dwukropek procent M apostrof zamknij nawias okrągły. Linia 27. return render podkreślnik template otwórz nawias okrągły apostrof zamowienie podkreślnik dodaj kropka html apostrof przecinek klienci znak równości klienci przecinek dania znak równości dania przecinek dzis znak równości dzis zamknij nawias okrągły.

W przypadku żądania GET wykonujemy dwa zapytania do bazy:

  • pierwsze – SELECT * FROM klienci – pobiera dane wszystkich klientów,

  • drugie – SELECT * FROM dania WHERE menu IS TRUE – pobiera informacje o daniach w menu.

Obie listy zostają przekazane do szablonu, w którym za pomocą pętli for dane klientów umieszczamy jako opcje listy, a dane dań jako pola checkbox. Dodatkowo przy nazwie każdego dania wstawiamy pole pozwalające podać jego liczbę. Nazwa tego pola tworzona jest przez połączenie słowa „liczba” i identyfikatora dania: name="liczba{{ d.id }}".

Ponieważ w formularzu jest pole umożliwiające wprowadzenie daty i czasu, a chcemy, aby domyślnie zawierało aktualną datę i czas, dane te pobieramy i formatujemy za pomocą kodu datetime.now().strftime('%Y-%m-%dT%H:%M') do postaci akceptowanej przez kontrolkę typu datetime‑local. Ciąg znaków przekazujemy w zmiennej dzis i wstawiamy w atrybutach min oraz value kontrolki.

Po otrzymaniu danych z formularza (żądanie typu POST) sprawdzamy, czy wybrano chociaż jedno danie. Jeżeli nie (if not request.form.getlist('dania'):), przygotowujemy komunikat dla użytkownika i nie przetwarzamy dalej formularza. Natomiast jeśli zaznaczono jakieś dania, odczytujemy identyfikator klienta, datę oraz rabat i dodajemy te dane do tabeli zamowienia:

Linia 1. db kropka execute otwórz nawias okrągły apostrof INSERT INTO zamowienia VALUES otwórz nawias okrągły znak zapytania przecinek znak zapytania przecinek znak zapytania przecinek znak zapytania zamknij nawias okrągły apostrof przecinek. Linia 2. otwórz nawias kwadratowy None przecinek id podkreślnik klienta przecinek data przecinek rabat zamknij nawias kwadratowy zamknij nawias okrągły.

Warto zwrócić uwagę, że tym razem do wykonywania zapytań SQL korzystamy z obiektu kursora (db = get_db().cursor()), a nie z obiektu połączenia. Robimy tak dlatego, że do zapisania wybranych dań potrzebujemy identyfikatora utworzonego zamówienia. Odczytujemy go z atrybutu lastrowid kursora: z_id = db.lastrowid.

Następnie w pętli odczytujemy:

  • identyfikatory wybranych dań: for d_id in request.form.getlist('dania'):,

  • liczbę zamówionych dań: liczba = request.form[f'liczba{d_id}'].

Zapisujemy dane w tabeli sklady_zamowien:

Linia 1. db kropka execute otwórz nawias okrągły apostrof INSERT INTO sklady podkreślnik zamowien VALUES otwórz nawias okrągły znak zapytania przecinek znak zapytania przecinek znak zapytania przecinek znak zapytania zamknij nawias okrągły apostrof przecinek. Linia 2. otwórz nawias kwadratowy None przecinek z podkreślnik id przecinek d podkreślnik id przecinek liczba zamknij nawias kwadratowy zamknij nawias okrągły.

Na koniec przekierowujemy żądanie do widoku wyświetlającego listę zamówień: return redirect(url_for('zamowienia.lista')).

Ćwiczenie 2

Uruchom aplikację i dodaj dwa zamówienia. Jako klienta wybierz: „Klient Domyślny”.

RABeACphkXxod
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
R1Kmf3JUvYBis
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Edycja zamówień

Uzupełniamy kod funkcji get_zamowienie() oraz część kodu widoku edytuj(), który obsługuje żądania typu GET:

Linia 1. def get podkreślnik zamowienie otwórz nawias okrągły z podkreślnik id zamknij nawias okrągły dwukropek. Linia 2. db znak równości get podkreślnik db otwórz nawias okrągły zamknij nawias okrągły. Linia 3. zamowienie znak równości db kropka execute otwórz nawias okrągły cudzysłów cudzysłów cudzysłów. Linia 4. SELECT z kropka asterysk przecinek k kropka asterysk FROM zamowienia z. Linia 5. INNER JOIN klienci k ON z kropka id podkreślnik klienta znak równości k kropka id. Linia 6. WHERE z kropka id znak równości znak zapytania. Linia 7. cudzysłów cudzysłów cudzysłów przecinek otwórz nawias kwadratowy z podkreślnik id zamknij nawias kwadratowy zamknij nawias okrągły kropka fetchone otwórz nawias okrągły zamknij nawias okrągły. Linia 9. if zamowienie is None dwukropek. Linia 10. abort otwórz nawias okrągły 404 przecinek f cudzysłów Zamówienie o id otwórz nawias klamrowy z podkreślnik id zamknij nawias klamrowy nie istnieje kropka cudzysłów zamknij nawias okrągły. Linia 11. return zamowienie. Linia 14. at bp kropka route otwórz nawias okrągły apostrof prawy ukośnik otwórz nawias ostrokątny int dwukropek z podkreślnik id zamknij nawias ostrokątny prawy ukośnik edytuj apostrof przecinek methods znak równości otwórz nawias kwadratowy apostrof GET apostrof przecinek apostrof POST apostrof zamknij nawias kwadratowy zamknij nawias okrągły. Linia 15. def edytuj otwórz nawias okrągły z podkreślnik id zamknij nawias okrągły dwukropek. Linia 16. dane znak równości get podkreślnik zamowienie otwórz nawias okrągły z podkreślnik id zamknij nawias okrągły. Linia 17. db znak równości get podkreślnik db otwórz nawias okrągły zamknij nawias okrągły. Linia 19. kratka poniżej wstawimy kod obsługujący żądania typu POST. Linia 22. dania znak równości db kropka execute otwórz nawias okrągły apostrof SELECT asterysk FROM dania WHERE menu IS TRUE apostrof zamknij nawias okrągły kropka fetchall otwórz nawias okrągły zamknij nawias okrągły. Linia 23. dania podkreślnik zamowione znak równości db kropka execute otwórz nawias okrągły cudzysłów cudzysłów cudzysłów. Linia 24. SELECT s podkreślnik z kropka liczba przecinek d kropka asterysk FROM sklady podkreślnik zamowien s podkreślnik z. Linia 25. INNER JOIN zamowienia z ON s podkreślnik z kropka id podkreślnik zamowienia znak równości z kropka id. Linia 26. INNER JOIN dania d ON s podkreślnik z kropka id podkreślnik dania znak równości d kropka id. Linia 27. WHERE z kropka id znak równości znak zapytania. Linia 28. cudzysłów cudzysłów cudzysłów przecinek otwórz nawias kwadratowy z podkreślnik id zamknij nawias kwadratowy zamknij nawias okrągły kropka fetchall otwórz nawias okrągły zamknij nawias okrągły. Linia 29. dania podkreślnik id znak równości otwórz nawias kwadratowy row otwórz nawias kwadratowy 1 zamknij nawias kwadratowy for row in dania podkreślnik zamowione zamknij nawias kwadratowy. Linia 30. dania znak równości otwórz nawias kwadratowy row for row in dania if row otwórz nawias kwadratowy apostrof id apostrof zamknij nawias kwadratowy not in dania podkreślnik id zamknij nawias kwadratowy. Linia 32. return render podkreślnik template otwórz nawias okrągły apostrof zamowienie podkreślnik edytuj kropka html apostrof przecinek rekord znak równości dane przecinek dania znak równości dania przecinek dania podkreślnik z znak równości dania podkreślnik zamowione zamknij nawias okrągły.

Na początku pobieramy dane zamówienia o identyfikatorze przekazanym w argumencie z_id. Używamy funkcji get_zamowienie(), która pobiera i zwraca informacje z tabeli zamowieniaklienci:

Linia 1. SELECT z kropka asterysk przecinek k kropka asterysk FROM zamowienia z. Linia 2. INNER JOIN klienci k ON z kropka id podkreślnik klienta znak równości k kropka id. Linia 3. WHERE z kropka id znak równości znak zapytania.

Następnie, jeżeli otrzymamy żądanie typu GET, pobieramy z bazy wszystkie dania, które są w menu, a następnie dane zamówionych dań:

Linia 1. SELECT s podkreślnik z kropka liczba przecinek d kropka asterysk FROM sklady podkreślnik zamowien s podkreślnik z. Linia 2. INNER JOIN zamowienia z ON s podkreślnik z kropka id podkreślnik zamowienia znak równości z kropka id. Linia 3. INNER JOIN dania d ON s podkreślnik z kropka id podkreślnik dania znak równości d kropka id. Linia 4. WHERE z kropka id znak równości znak zapytania.

Przygotowujemy listę identyfikatorów zamówionych dań: dania_id = [row[1] for row in dania_zamowione]. Następnie na liście wszystkich dań pozostawiamy tylko te, których nie ma w zamówieniu: dania = [row for row in dania if row['id'] not in dania_id]. Do szablonu przekazujemy dane zamówienia (w zmiennej rekord), listę dostępnych dań (w zmiennej dania) i listę zamówionych dań (w zmiennej dania_z).

Dodajemy szablon zamowienie_edytuj.html:

Linia 1. otwórz nawias klamrowy procent extends cudzysłów base kropka html cudzysłów procent zamknij nawias klamrowy. Linia 2. otwórz nawias klamrowy procent block podtytul procent zamknij nawias klamrowy Zamówienie – edycja otwórz nawias klamrowy procent endblock procent zamknij nawias klamrowy. Linia 4. otwórz nawias klamrowy procent block tresc procent zamknij nawias klamrowy. Linia 5. otwórz nawias ostrokątny p zamknij nawias ostrokątny otwórz nawias klamrowy otwórz nawias klamrowy rekord kropka id zamknij nawias klamrowy zamknij nawias klamrowy przecinek otwórz nawias klamrowy otwórz nawias klamrowy rekord kropka id podkreślnik klienta zamknij nawias klamrowy zamknij nawias klamrowy przecinek otwórz nawias klamrowy otwórz nawias klamrowy rekord kropka data zamknij nawias klamrowy zamknij nawias klamrowy otwórz nawias ostrokątny prawy ukośnik p zamknij nawias ostrokątny. Linia 6. otwórz nawias ostrokątny form method znak równości cudzysłów POST cudzysłów action znak równości cudzysłów otwórz nawias klamrowy otwórz nawias klamrowy url podkreślnik for otwórz nawias okrągły apostrof zamowienia kropka edytuj apostrof przecinek z podkreślnik id znak równości rekord kropka id zamknij nawias okrągły zamknij nawias klamrowy zamknij nawias klamrowy cudzysłów zamknij nawias ostrokątny. Linia 7. otwórz nawias ostrokątny label for znak równości cudzysłów klient cudzysłów zamknij nawias ostrokątny Klient dwukropek otwórz nawias ostrokątny prawy ukośnik label zamknij nawias ostrokątny. Linia 8. otwórz nawias ostrokątny input type znak równości cudzysłów text cudzysłów id znak równości cudzysłów klient cudzysłów name znak równości cudzysłów klient cudzysłów value znak równości cudzysłów otwórz nawias klamrowy otwórz nawias klamrowy rekord kropka id podkreślnik klienta zamknij nawias klamrowy zamknij nawias klamrowy otwórz nawias klamrowy otwórz nawias klamrowy rekord kropka imie zamknij nawias klamrowy zamknij nawias klamrowy otwórz nawias klamrowy otwórz nawias klamrowy rekord kropka nazwisko zamknij nawias klamrowy zamknij nawias klamrowy cudzysłów readonly zamknij nawias ostrokątny. Linia 9. otwórz nawias ostrokątny br zamknij nawias ostrokątny. Linia 10. otwórz nawias ostrokątny label for znak równości cudzysłów data cudzysłów zamknij nawias ostrokątny Data przecinek godzina dwukropek otwórz nawias ostrokątny prawy ukośnik label zamknij nawias ostrokątny. Linia 11. otwórz nawias ostrokątny input type znak równości cudzysłów datetime minus local cudzysłów id znak równości cudzysłów data cudzysłów name znak równości cudzysłów data cudzysłów value znak równości cudzysłów otwórz nawias klamrowy otwórz nawias klamrowy rekord kropka data zamknij nawias klamrowy zamknij nawias klamrowy cudzysłów required zamknij nawias ostrokątny. Linia 12. otwórz nawias ostrokątny br zamknij nawias ostrokątny. Linia 13. otwórz nawias ostrokątny fieldset zamknij nawias ostrokątny. Linia 14. otwórz nawias ostrokątny legend zamknij nawias ostrokątny Dania otwórz nawias ostrokątny prawy ukośnik legend zamknij nawias ostrokątny. Linia 15. otwórz nawias ostrokątny p zamknij nawias ostrokątny Zamówione dwukropek otwórz nawias ostrokątny prawy ukośnik p zamknij nawias ostrokątny. Linia 16. otwórz nawias klamrowy procent for d in dania podkreślnik z procent zamknij nawias klamrowy. Linia 17. otwórz nawias ostrokątny div style znak równości cudzysłów white minus space dwukropek nowrap cudzysłów zamknij nawias ostrokątny. Linia 18. otwórz nawias ostrokątny input type znak równości cudzysłów checkbox cudzysłów name znak równości cudzysłów dania cudzysłów value znak równości cudzysłów otwórz nawias klamrowy otwórz nawias klamrowy d kropka id zamknij nawias klamrowy zamknij nawias klamrowy cudzysłów checked zamknij nawias ostrokątny otwórz nawias klamrowy otwórz nawias klamrowy d kropka nazwa zamknij nawias klamrowy zamknij nawias klamrowy przecinek otwórz nawias klamrowy otwórz nawias klamrowy d kropka cena zamknij nawias klamrowy zamknij nawias klamrowy zł. Linia 19. otwórz nawias ostrokątny input type znak równości cudzysłów number cudzysłów name znak równości cudzysłów liczba otwórz nawias klamrowy otwórz nawias klamrowy d kropka id zamknij nawias klamrowy zamknij nawias klamrowy cudzysłów value znak równości cudzysłów otwórz nawias klamrowy otwórz nawias klamrowy d kropka liczba zamknij nawias klamrowy zamknij nawias klamrowy cudzysłów min znak równości cudzysłów 0 cudzysłów step znak równości cudzysłów 1 cudzysłów zamknij nawias ostrokątny. Linia 20. otwórz nawias ostrokątny prawy ukośnik div zamknij nawias ostrokątny. Linia 21. otwórz nawias klamrowy procent endfor procent zamknij nawias klamrowy. Linia 22. otwórz nawias ostrokątny p zamknij nawias ostrokątny Dania dostępne dwukropek otwórz nawias ostrokątny prawy ukośnik p zamknij nawias ostrokątny. Linia 23. otwórz nawias klamrowy procent for d in dania procent zamknij nawias klamrowy. Linia 24. otwórz nawias ostrokątny div style znak równości cudzysłów white minus space dwukropek nowrap cudzysłów zamknij nawias ostrokątny. Linia 25. otwórz nawias ostrokątny input type znak równości cudzysłów checkbox cudzysłów name znak równości cudzysłów dania cudzysłów value znak równości cudzysłów otwórz nawias klamrowy otwórz nawias klamrowy d kropka id zamknij nawias klamrowy zamknij nawias klamrowy cudzysłów zamknij nawias ostrokątny otwórz nawias klamrowy otwórz nawias klamrowy d kropka nazwa zamknij nawias klamrowy zamknij nawias klamrowy przecinek otwórz nawias klamrowy otwórz nawias klamrowy d kropka cena zamknij nawias klamrowy zamknij nawias klamrowy zł. Linia 26. otwórz nawias ostrokątny input type znak równości cudzysłów number cudzysłów name znak równości cudzysłów liczba otwórz nawias klamrowy otwórz nawias klamrowy d kropka id zamknij nawias klamrowy zamknij nawias klamrowy cudzysłów value znak równości cudzysłów 1 cudzysłów min znak równości cudzysłów 0 cudzysłów step znak równości cudzysłów 1 cudzysłów zamknij nawias ostrokątny. Linia 27. otwórz nawias ostrokątny prawy ukośnik div zamknij nawias ostrokątny. Linia 28. otwórz nawias klamrowy procent endfor procent zamknij nawias klamrowy. Linia 29. otwórz nawias ostrokątny prawy ukośnik fieldset zamknij nawias ostrokątny. Linia 30. otwórz nawias ostrokątny br zamknij nawias ostrokątny. Linia 31. otwórz nawias ostrokątny label for znak równości cudzysłów rabat cudzysłów zamknij nawias ostrokątny Rabat dwukropek otwórz nawias ostrokątny prawy ukośnik label zamknij nawias ostrokątny. Linia 32. otwórz nawias ostrokątny input type znak równości cudzysłów number cudzysłów id znak równości cudzysłów rabat cudzysłów name znak równości cudzysłów rabat cudzysłów value znak równości cudzysłów otwórz nawias klamrowy otwórz nawias klamrowy rekord kropka rabat zamknij nawias klamrowy zamknij nawias klamrowy cudzysłów step znak równości cudzysłów kropka 01 cudzysłów zamknij nawias ostrokątny. Linia 33. otwórz nawias ostrokątny button type znak równości cudzysłów submit cudzysłów zamknij nawias ostrokątny Zapisz otwórz nawias ostrokątny prawy ukośnik button zamknij nawias ostrokątny. Linia 34. otwórz nawias ostrokątny prawy ukośnik form zamknij nawias ostrokątny. Linia 35. otwórz nawias klamrowy procent endblock procent zamknij nawias klamrowy.

Formularz różni się od formularza dodawania tym, że dane klienta wyświetlamy w polu tylko do odczytu – atrybut readonly. Pola daty oraz rabatu uzupełniamy wartościami odczytanymi z rekordu zamówienia.

Ważne!

W formularzu tworzymy również dwie grupy dań (kontrolki typu checkbox): zamówionych i dostępnych. Grupy mają taką samą nazwę, a więc identyfikatory zaznaczonych dań z obydwu grup będą dostępne po przesłaniu na serwer w liście dania.

Teraz uzupełnimy widok edytuj() o kod obsługujący żądania typu POST:

Linia 1. kratka poniżej wstawimy kod obsługujący żądania typu POST. Linia 2. if request kropka method znak równości znak równości apostrof POST apostrof dwukropek. Linia 3. if not request kropka form kropka getlist otwórz nawias okrągły apostrof dania apostrof zamknij nawias okrągły dwukropek. Linia 4. flash otwórz nawias okrągły cudzysłów Nie wybrano dań wykrzyknik cudzysłów zamknij nawias okrągły. Linia 5. else dwukropek. Linia 6. data znak równości datetime kropka strptime otwórz nawias okrągły request kropka form otwórz nawias kwadratowy apostrof data apostrof zamknij nawias kwadratowy przecinek apostrof procent Y minus procent m minus procent dT procent H dwukropek procent M apostrof zamknij nawias okrągły. Linia 7. rabat znak równości request kropka form otwórz nawias kwadratowy apostrof rabat apostrof zamknij nawias kwadratowy. Linia 8. db kropka execute otwórz nawias okrągły apostrof UPDATE zamowienia SET data znak równości znak zapytania przecinek rabat znak równości znak zapytania WHERE id znak równości znak zapytania apostrof przecinek otwórz nawias kwadratowy data przecinek rabat przecinek z podkreślnik id zamknij nawias kwadratowy zamknij nawias okrągły. Linia 10. dania podkreślnik z znak równości otwórz nawias kwadratowy row otwórz nawias kwadratowy 0 zamknij nawias kwadratowy for row in db kropka execute otwórz nawias okrągły cudzysłów cudzysłów cudzysłów. Linia 11. SELECT id podkreślnik dania FROM sklady podkreślnik zamowien WHERE id podkreślnik zamowienia znak równości znak zapytania. Linia 12. cudzysłów cudzysłów cudzysłów przecinek otwórz nawias kwadratowy z podkreślnik id zamknij nawias kwadratowy zamknij nawias okrągły zamknij nawias kwadratowy. Linia 13. dania znak równości otwórz nawias kwadratowy int otwórz nawias okrągły d podkreślnik id zamknij nawias okrągły for d podkreślnik id in request kropka form kropka getlist otwórz nawias okrągły apostrof dania apostrof zamknij nawias okrągły zamknij nawias kwadratowy. Linia 15. for d podkreślnik id in dania dwukropek. Linia 16. liczba znak równości request kropka form otwórz nawias kwadratowy f apostrof liczba otwórz nawias klamrowy d podkreślnik id zamknij nawias klamrowy apostrof zamknij nawias kwadratowy. Linia 17. if d podkreślnik id in dania podkreślnik z dwukropek. Linia 18. db kropka execute otwórz nawias okrągły. Linia 19. apostrof UPDATE sklady podkreślnik zamowien SET liczba znak równości znak zapytania apostrof. Linia 20. apostrof WHERE id podkreślnik zamowienia znak równości znak zapytania AND id podkreślnik dania znak równości znak zapytania apostrof przecinek otwórz nawias kwadratowy liczba przecinek z podkreślnik id przecinek d podkreślnik id zamknij nawias kwadratowy zamknij nawias okrągły. Linia 21. else dwukropek. Linia 22. db kropka execute otwórz nawias okrągły apostrof INSERT INTO sklady podkreślnik zamowien VALUES otwórz nawias okrągły znak zapytania przecinek znak zapytania przecinek znak zapytania przecinek znak zapytania zamknij nawias okrągły apostrof przecinek otwórz nawias kwadratowy None przecinek z podkreślnik id przecinek d podkreślnik id przecinek liczba zamknij nawias kwadratowy zamknij nawias okrągły. Linia 23. for d podkreślnik id in set otwórz nawias okrągły dania podkreślnik z zamknij nawias okrągły minus set otwórz nawias okrągły dania zamknij nawias okrągły dwukropek. Linia 24. db kropka execute otwórz nawias okrągły apostrof DELETE FROM sklady podkreślnik zamowien WHERE id podkreślnik zamowienia znak równości znak zapytania AND id podkreślnik dania znak równości znak zapytania apostrof przecinek. Linia 25. otwórz nawias kwadratowy z podkreślnik id przecinek d podkreślnik id zamknij nawias kwadratowy zamknij nawias okrągły. Linia 27. db kropka commit otwórz nawias okrągły zamknij nawias okrągły. Linia 29. flash otwórz nawias okrągły f apostrof Zaktualizowano dane zamówienia id otwórz nawias klamrowy z podkreślnik id zamknij nawias klamrowy kropka apostrof zamknij nawias okrągły. Linia 31. return redirect otwórz nawias okrągły url podkreślnik for otwórz nawias okrągły apostrof zamowienia kropka lista apostrof zamknij nawias okrągły zamknij nawias okrągły.

Jeżeli zamówienie zawiera jakieś dania, aktualizujemy datę i rabat: UPDATE zamowienia SET data = ?, rabat = ? WHERE id = ?. Następnie pobieramy identyfikatory dań, które były w zamówieniu do tej pory, i zapisujemy w liście dania_z:

Linia 1. dania podkreślnik z znak równości otwórz nawias kwadratowy row otwórz nawias kwadratowy 0 zamknij nawias kwadratowy for row in db kropka execute otwórz nawias okrągły cudzysłów cudzysłów cudzysłów. Linia 2. SELECT id podkreślnik dania FROM sklady podkreślnik zamowien WHERE id podkreślnik zamowienia znak równości znak zapytania. Linia 3. cudzysłów cudzysłów cudzysłów przecinek otwórz nawias kwadratowy z podkreślnik id zamknij nawias kwadratowy zamknij nawias okrągły zamknij nawias kwadratowy.

Dalej odczytujemy identyfikatory dań przesłane z formularza (dania = [int(d_id) for d_id in request.form.getlist('dania')]) i zaczynamy je przeglądać w pętli for. Dla każdego dania odczytujemy jego liczbę i sprawdzamy, czy znajdowało się ono na liście zamówionych dań: if d_id in dania_z:.

Jeżeli tak, aktualizujemy dane w tabeli sklady_zamowien:

Linia 1. UPDATE sklady podkreślnik zamowien SET liczba znak równości znak zapytania WHERE id podkreślnik zamowienia znak równości znak zapytania AND id podkreślnik dania znak równości znak zapytania.

Jeżeli nie, dodajemy nowe danie do zamówienia:

Linia 1. INSERT INTO sklady podkreślnik zamowien VALUES otwórz nawias okrągły znak zapytania przecinek znak zapytania przecinek znak zapytania przecinek znak zapytania zamknij nawias okrągły.

W wyrażeniu set(dania_z) - set(dania) przekształcamy listy w zbiory i uzyskujemy ich różnicę, tj. identyfikatory dań, które były wcześniej w zamówieniu, ale teraz ich brak, co znaczy, że zostały w formularzu odznaczone. Dania te usuwamy z zamówienia:

Linia 1. DELETE FROM sklady podkreślnik zamowien WHERE id podkreślnik zamowienia znak równości znak zapytania AND id podkreślnik dania znak równości znak zapytania.
Ćwiczenie 3

Uruchom aplikację i zaktualizuj skład wybranego zamówienia.

RKNBxQr8iJndb
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
R1GtOOuoyJAzn
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Usuwanie zamówień

Dane o zamówieniach zapisane są w dwóch tablicach połączonych relacją jeden‑do‑wielu, tzn. jeden identyfikator zamówienia, klucz główny w tablicy nadrzędnej zamowienia, może wystąpić wiele razy jako klucz obcy w tablicy podrzędnej sklady_zamowien. Do usuwania zamówień powinniśmy wykorzystać ograniczenia nałożone na relację między tymi tablicami: ON DELETE CASCADE. Dzięki temu nie trzeba usuwać ręcznie informacji o zamówionych daniach z tabeli sklady_zamowien, wystarczy usunąć dane zamówienia z tablicy zamowienia.

Ponieważ przestrzeganie wspomnianych ograniczeń w bazach SQLite domyślnie jest wyłączone przed wykonaniem klauzuli DELETE, należy wykonać zapytanie: PRAGMA foreign_keys=on.

Poza omówioną różnicą widok usuwający zamówienia nie różni się od widoków usuwających dane dań i klientów. Podobnie jest z formularzem usuwania.

Ćwiczenie 4

Uzupełnij kod widoku usun() w pliku zamowienia.py tak, aby:

  • na żądanie typu GET zwracał formularz z danymi zamówienia (identyfikator, imię, nazwisko klienta, data) oraz pytaniem o potwierdzenie usunięcia,

  • po otrzymaniu potwierdzenia usuwał dane zamówienia z tablicy zamowienia.

Formularz umieść w szablonie o nazwie zamowienie_usun.html.

Słownik

walidacja danych
walidacja danych

sprawdzanie poprawności przesłanych danych (np. zgodność z oczekiwanym typem i rozmiarem danych), a także weryfikacja pod względem potencjalnych zagrożeń bezpieczeństwa

dekorator
dekorator

funkcja, która jako argument otrzymuje inną funkcję, rozszerza jej działanie i zwraca ją

front‑end, back‑end
front‑end, back‑end

w aplikacji internetowej: graficzny interfejs użytkownika (front‑end), tj. strony WWW wyświetlane w przeglądarce, w tym zawierające formularze pozwalające wysyłać dane na serwer, na którym działa oprogramowanie (czyli back‑end) obsługujące żądania klienta, w tym wykonujące operacje na bazie danych

klient‑serwer
klient‑serwer

rozwiązanie polegające na podziale zadań realizowanych przez systemy komputerowe, gdzie klient wysyła żądania, a serwer przetwarza je i zazwyczaj odsyła odpowiedź, np. w postaci kodu strony WWW

renderowanie
renderowanie

w aplikacji WWW: przygotowanie kodu HTML strony WWW zawierającej dane pobrane z bazy danych

widok
widok

skojarzona z określonym adresem URL funkcja, której zadaniem jest przygotowanie odpowiedzi aplikacji na żądanie obsługiwane przez serwer

encja
encja

(ang. entity) schematyczny opis rzeczywistych lub abstrakcyjnych obiektów za pomocą tzw. atrybutów lub własności wskazujących ich cechy

atrybut kluczowy
atrybut kluczowy

pole (lub kombinacja pól) zawierające niepowtarzalne wartości, jednoznacznie identyfikujące rekordy tabeli; najczęściej zawiera kolejne wartości liczbowe automatycznie tworzone przez aparat bazy danych