Widoki budynków w Flask

W ramach modelu lub paradygmatu rozwoju, który proponuje KolbaJednym z najważniejszych punktów jest zarządzanie widokami, ponieważ pozwalają one nam zdefiniować sposób, w jaki użytkownik będzie wchodził w interakcję z naszą stroną lub aplikacją.

Najprostszym sposobem pracy z widokiem jest zdefiniowanie operacji bezpośrednio w definicji jej ścieżki, jednak nie zawsze jest to przydatne lub adekwatne, zwłaszcza jeśli budujemy duże aplikacje.

WymaganiaPotrzebujemy funkcjonalnej instalacji Kolba a ze względu na kompatybilność potrzebujemy wersji wyższej niż ta 0.7 ponieważ jeden z komponentów, z którymi będziemy pracować, nie był zawarty we frameworku przed wspomnianą wersją. Musimy też uruchomić aplikację lub mieć jakąś aplikację Kolba abyśmy mogli zawrzeć przykłady w sekcji widoków i dzięki temu móc je wykonywać przez przeglądarkę.

Widoki oparte na rolach


Jest to jeden z najprostszych sposobów budowania interakcji z użytkownikiem, wystarczy napisać funkcję i udekorować ją trasą, to sprawia, że ​​gdy router Kolba odbiera żądanie, sprawdza, czy na daną trasę czeka jakaś funkcja, a następnie, jeśli ją otrzyma, wykonuje ją.

Generalnie tego typu poglądy wymagają przynajmniej metody DOSTWAĆ z HTTPJednak jako dobra praktyka i ze względów bezpieczeństwa, jeśli chcemy dodać wartości do naszej struktury trwałości danych, możemy również skorzystać z metody POCZTA.

Tworzenie widoku za pomocą GET


Stworzymy widok za pomocą metody DOSTWAĆAby to zrobić, wystarczy zdefiniować jej nazwę w funkcji i przypisać do niej trasę, następnie wewnątrz funkcji umieścimy naszą treść, zobaczmy poniższy kod dla zilustrowania.
 @ app.route ('/ view-get') def view (): value = request.args.get ('content', 'sample') return 'To jest widok używający GET i otrzymuje wartość:% s'% wartość
W kodzie widzimy, jak używamy dekorator Aby wskazać, na którą trasę czekamy, definiujemy odpowiednią funkcję i w jej ramach wykonujemy połączenie z żądanie do argumentów otrzymanych przez DOSTWAĆ, w tym przypadku szukamy argumentu o nazwie content i przypisujemy go do zmiennej o nazwie wartość, jeśli ten argument nie istnieje, "sample" zostanie umieszczona jako wartość domyślna, a na końcu zwracamy tekst i przekazujemy treść wartości .

Jeśli uruchomimy nasz przykład w przeglądarce, otrzymamy:

Tworzenie widoku za pomocą POST


Co się stanie, jeśli chcemy otrzymywać dane wrażliwe i nie chcemy przekazywać ich przez parametry w adresie URL, ponieważ w takich przypadkach musimy użyć metody POST, ponieważ wysyła dane ukryte przed wzrokiem użytkownika, oczywiście tam to inne środki bezpieczeństwa, z których powinniśmy korzystać, ale w tej chwili nie są nam potrzebne w tym przypadku.

Aby zbudować widok, który odbiera dane przez POST, wystarczy wskazać oczekiwaną metodę w dekorator który otrzymuje wybraną przez nas trasę, do tego używamy dodatkowego parametru metody.

Następnie w ramach naszej funkcji możemy użyć żądanie aby uzyskać wartości, jednak w przeciwieństwie do poprzedniego przykładu, zamiast wymagać argumentów, musimy wskazać, że otrzymujemy wartości z formularza. Spójrzmy na kod tego, co właśnie wyjaśniliśmy.

 @ app.route ('/ post-view', method = ['POST',]) def post_view (): value = request.form.get ('content', 'sample') return 'To jest widok używający POST i otrzymuje wartość:% s'% wartości
Możemy zauważyć, że jest to prawie ten sam kod, co powyżej, z wyjątkiem wspomnianych już różnic, ale zobaczmy, co się stanie, jeśli uruchomimy nasz kod bezpośrednio w naszej przeglądarce:

POWIĘKSZAĆ

W jaki sposób określamy tylko, że możemy otrzymać metodę? POCZTA, przy dostępie przez DOSTWAĆ nasza aplikacja odrzuca wpis i dlatego wysyła nam kod 405 Metoda nie jest dozwolona, ​​więc bez wartości pochodzących z żądania POST ten widok nie pokaże żadnych informacji.

Łączenie GET i POST w widoku


Ponieważ obsługa różnych widoków dla każdej metody nie zawsze jest tym, czego chcemy, możemy użyć obu metod w tym samym widoku, jest to bardzo przydatne zwłaszcza, gdy chcemy przetwarzać formularze, na przykład za pomocą metody DOSTWAĆ pokazujemy formę i z POCZTA przetwarzamy wysyłkę tego samego.

Aby skorzystać z tego trybu musimy tylko dodać DOSTWAĆ na liście, którą przekazaliśmy metody przy definiowaniu dekorator ze ścieżką, zobaczmy poniższy kod:

 @ app.route ('/ view', method = ['GET', 'POST',]) def view (): if request.method == "GET": return '' 'Pokaż widoki' '' else: value = request.form.get ('content', 'sample') return 'To jest widok używający GET i POST, który otrzymuje wartość:% s'% wartości
Podczas wywoływania trasy z przeglądarki za pomocą metody DOSTWAĆ otrzymujemy:

Następnie pisząc coś w polu tekstowym i naciskając Enter wysyłamy formularz do tej samej ścieżki, ale z metodą POCZTA, co daje nam wynik podobny do następującego:

Tutaj napisaliśmy prawdziwy widok oparty na funkcjach, który pozwala nam używać i korzystać z obu metod HTTP do wykonywania naszych operacji.

Widoki oparte na klasach


Ponieważ tworzenie funkcji, nawet jeśli służą naszym celom, jest czasami bardzo kłopotliwe i wymaga posiadania większej ilości kodu niż to konieczne, Kolba zrealizował rozmowy widoki oparte na klasach, koncepcja, z której zapożyczył Django, a to pozwala nam pisać klasy, za pomocą których będziemy generować widoki, klasy te mogą być generyczne, z którymi możemy dziedziczyć, jeśli chcemy.

Aby użyć tego typu komponentu musimy najpierw zaimportować z kolba.widoki, gdzie klasa? Pogląd Jest to klasa generyczna, która pozwoli nam dodać podstawowe funkcjonalności umożliwiające wysyłanie tras i definiowanie metod.

Tworzenie naszego widoku opartego na klasach


W tym przykładzie stworzymy ten sam widok, który zrobiliśmy w poprzednim przykładzie, ale z podejścia opartego na klasach, w ten sposób możemy ustalić różnice między obiema formami, pamiętaj, że chociaż nie występuje w przykładowym kodzie, zrobiliśmy import klasy View.

Spójrzmy na kod naszego przykładu:

 class ViewClass (Widok): method = ['GET', 'POST',] def dispatch_request (self): if request.method == "GET": return '' 'Pokaż widoki' '' if request.method == " POST ": value = request.form.get ('content', 'sample') return 'To jest widok używający GET i POST, który otrzymuje wartość:% s'% valorapp.add_url_rule ('/ view-class', view_func = VistaClase.as_view ('klasa widoku'))
To najbardziej podstawowa forma tego stylu poglądów, jednak widzimy, że nie jesteśmy już zależni od tego dekorator, co robimy, to nazywamy metodę żądanie_wysyłki i minęliśmy go samego siebie aby otrzymał ten sam obiekt z tym możemy określić jakie żądania otrzymamy, następnie wskazujemy, że otrzymamy obie metody i na koniec definiujemy nasze zachowania, wynik na przeglądarkę będzie taki sam jak poprzedni, będziemy mieli pole i gdy go wyślemy, otrzymamy określoną odpowiedź.

Ale co, jeśli chcemy napisać znacznie czystszy kod? Do tego możemy użyć klasy Widok metody z Kolba co pozwala nam tworzyć metody w ramach klasy do definiowania metod HTTP w prostszy sposób.

Zobaczmy następujący przykład, w którym przepisujemy poprzedni kod, aby użyć tego trybu:

 class ViewClass (MethodView): def get (self): return '' 'Show Views'' 'def post (self): value = request.form.get (' content ',' sample ') return' To jest widok używający GET i POST, które otrzymują wartość:% s'% valorapp.add_url_rule ('/ view-class', view_func = ViewClass.as_view (' view-class'))
Jak widać zrezygnowaliśmy z definicji metod, które otrzymamy, w dodatku nie korzystamy już z metody załatwić, po prostu definiujemy, co będziemy robić w metodzie POCZTAi co zrobimy w GET, dając w ten sposób znacznie więcej oczyszczenia naszego wzroku.

Wciąż trwa debata, czy lepiej poglądy oparte na rolach fale oparte na klasach, ale tak naprawdę nie ma jednego lepszego od drugiego, są po prostu dwa sposoby pracy, rekomendacja jest taka, że ​​jeśli widok jest bardzo prosty to możemy to zrobić z funkcjami a jeśli ma już pełniejszą logikę robimy to z klasami .

Na tym zakończyliśmy ten samouczek, w którym zbudowaliśmy ważną bazę, wiedząc, jak działają widoki i jak możemy pracować z ich różnymi metodami HTTP, ponieważ jest to podstawa, na której możemy tworzyć bardziej zaawansowane aplikacje.

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave