Blog JSystems - z miłości do programowania

Framework Flask - odczyt parametrów z paska



Odczyt parametrów z paska


funkcjonalność „pierwszej potrzeby”. Będzie wykorzystywana wszędzie tam gdzie zechcesz np. zrobić podgląd szczegółów jakiejś encji, edycję jakiegoś wpisu w bazie danych etc. We wszystkich tego rodzaju przypadkach trzeba będzie przekazać do widoku unikalny identyfikator podglądanego, kasowanego czy edytowanego obiektu. Na potrzeby przykładu dodałem do projektu nowy plik „MyDataSource”.  Nie ma tu nic nadzwyczajnego, ani też nic nowego. Jest to dla nas typowo użytkowa klasa symulująca DAO. Mamy więc klasę „Product” której obiekty będę wyświetlał. Funkcja „getAll” zwraca listę takich obiektów, a „getOne” jeden taki obiekt:


67.png (583×440)


W dalszej kolejności dodaję do aplikacji dodatkowy ekran, będzie widoczny pod adresem „/products” (linia 6). W reakcji na wywołanie tego url wyświetlam plik „products.html’ (z katalogu templates), oraz przekazuję pod nazwą „products” listę obiektów zwróconych przez funkcję „getAll”.


68.png (605×218)


Po stronie widoku również na razie nie robię nic nadzwyczajnego.  Iteruję po przekazanej liście by wyświetlić przekazane produkty:


69.png (480×352)


Wynik działania nie należy do szczególnie widowiskowych, ot tabelka z id i nazwą produktów:


70.png (317×131)


Dopiero teraz zaczyna się właściwa zabawa. Naturalnie nie wyświetlam opisów produktów, ponieważ te mogą być bardzo długie, zajmować sporą część ekranu, a przy przeglądaniu listy produktów tak szczegółowe informacje o nich nie są nam potrzebne. Dorobimy sobie zatem podstronę szczegółów produktu. Będzie nam potrzebna podstrona, której struktura adresu powinna wyglądać mniej więcej tak: „showProduct?id=2”. Wartość występująca po „id=” to id produktu którego szczegóły chcemy oglądać. Będziemy więc musieli dorobić linki typu „pokaż szczegóły”. W pierwszej kolejności dokonuję pewnej przeróbki w kodzie html (plik products.html):


71.png (528×211)


Pojawiła nam się dodatkowa kolumna. Umyślnie zrobiłem tak by na razie był to po prostu tekst do wyświetlenia. Chciałem w ten sposób pokazać, że tagi jinja można również stosować w ten sposób, np. dynamicznie wstrzykiwać wartości do linków. Pod takie adresy będą przekierowywały linki gdy te napisy się nimi staną:


72.png (241×100)


Jak widzimy, dzięki takiemu zabiegowi każdy produkt ma link różniący się wartością parametru ID. W kolejnym kroku dokonuję takiej przeróbki by wcześniej napisy, teraz stały się adresami pod które odsyłają linki:


73.png (600×185)


Efekt po uruchomieniu:


74.png (242×101)


Pozostaje nam zadbać by po kliknięciu pojawiła się odpowiednia strona prezentująca szczegóły produktu. Dodaję więc kolejną metodę do obsługi nowego widoku:


75.png (561×398)


Przykład jak dobrać się do parametrów z paska pokazuję w linii 12. Odnosimy się do obiektu request który trzeba uprzednio zaimportować (linia 1).  Można znaleźć w tym obiekcie całkiem sporo ciekawych rzeczy, takich jak aktualny URL, host użytkownika etc. Odsyłam do https://flask.palletsprojects.com/en/1.1.x/api/#flask.Request.args.


W tym przypadku odczytane ID wyświetlam po prostu na konsoli i wyświetlam na razie pusty plik „showProducts.html”.  Po uruchomieniu i kliknięciu na link dostajemy taki efekt:


76.png (218×80)


Pozostaje nam teraz odczytanie obiektu którego szczegóły chcemy przeglądać, przekazanie go do widoku i wyświetlenie. Korzystając z mojego pseudo DAO pobieram pojedynczy obiekt klasy Product (linia 13). Produkt ten przekazuję jak zawsze do widoku (linia 14):


77.png (602×120)


Po stronie widoku wszystko odbywa się jak dotychczas, z taką różnicą że zagłębiam się w pola obiektu (linie 4-6):


78.png (603×242)


Po kliknięciu w link przy produkcie „Bulbulator” dostajemy taki efekt:


79.png (345×145)


 

Przyjdź do nas na szkolenie z języka Python! Mamy szereg szkoleń w ofercie, od podstawowych po aplikacje webowe z użyciem Django, analizę danych, tesowanie, machine learning i wiele innych.
Sprawdź dostępne szkolenia Python
Zapisz się do newslettera aby otrzymywać najnowsze świeżynki pojawiające się na blogu!