8.4. MVC

W projektowaniu aplikacji internetowych odwołujemy się do wzorca M(odel)V(iew)C(ontroller), czyli Model–Widok–Kontroler, co pozwala na oddzielenie danych od ich prezentacji oraz logiki aplikacji. Frameworki takie jak Flask czy Django korzystają z tego wzorca

8.4.1. Model

Modelemodel w Django reprezentuje źródło informacji; są to klasy Pythona opisujące pojedyncze tabele w bazie danych (zob. ORM); atrybuty klasy odpowiadają polom tabeli, ewentualne funkcje wykonują operacje na danych. Instancja klasy odpowiada rekordowi danych. Modele definiujemy w pliku models.py.

8.4.2. Widok

Widokiwidok we Flasku lub Django to funkcja lub klasa Pythona, która odpowiada na żądania www, np. zwraca kod HTML generowany w szablonie (ang. template), jakiś dokument, obrazek lub przekierowuje na inny adres.

W Django Widoki definiujemy w pliku views.py. Django zawiera wiele widoków wbudowanych (ang. generic views), w tym opartych na klasach opisujących modele, umożliwiających przeglądanie (np. ListView, DetailView) i edycję danych (np. CreateView, UpdateView).

Każda funkcja pełniąca rolę widoku jako pierwszy argument otrzymuje obiekt HttpRequest zawierający informacje o żądaniu, np. jego typ (GET lub POST), nazwę użytkownika, a zwłaszcza dane przesłane do serwera. Obiekt request jest słownikiem. Widok musi zwrócić jakąś odpowiedź. W Django jest to obiekt typu HttpResponse.

Widoki wykonują jakieś operacje po stronie serwera w odpowiedzi na żądania klienta. Widoki powiązane są z określonymi adresami url.

Dane z bazy przekazywane są do szablonów za pomocą Pythonowego słownika. Renderowanie polega na odszukaniu pliku szablonu, zastąpieniu przekazanych zmiennych danymi i odesłaniu całości (HTML + dane) do użytkownika.

W Django szablony zapisywane są w podkatalogu templates/nazwa_aplikacji.

8.4.3. Kontroler

Kontrolerkontroler to mechanizm kierujący kolejne żądania do odpowiednich widoków na podstawie wzorców adresów URL. We Flasku adresy powiązane z widokiem definiujemy w dekoratorach typu @app.route('/', methods=['GET', 'POST']). W Django adresy wiążemy z widokami w pliku urls.py np.: url(r'^loguj/$', views.loguj, name='loguj').

8.4.3.1. Wzorce dopasowania

Fragment r'^loguj/$' to wyrażenie regularne, często określane w języku angielskim skrótowo regex. Najczęściej będzie zawierać następujące symbole:

  1. r – początek, $ – koniec, ograniczniki granic wyrażenia
  2. ^ – dopasowuje początek ciągu lub nowej linii
  3. . – dowolny pojedynczy znak
  4. \d lub [0-9] – pojedyncza cyfra dziesiętna
  5. [a-z], [A-Z], [a-zA-Z] – małe i/lub duże litery
  6. +, np. \d+ – jedno lub więcej wystąpień poprzedniego wyrażenia
  7. ?, np. \d? – zero lub 1 wystąpienie poprzedniego wyrażenia
  8. *, np. \d* – zero lub więcej wystąpień poprzedniego wyrażenia
  9. {1,3}, np. \d{1,3} – od 1 do 3 wystąpień poprzedniego wyrażenia

Więcej nt wyrażeń regularnych w Pythonie znajdziesz w dokumentacji: Regular Expression Syntax.

8.4.4. Django

Twórcy Django traktują wzorzec MVC elastycznie, twierdząc że ich framework wykorzystuje taczej wzorzec MTV, czyli model (Model), szablon (Template), widok (View). Oznacza to, że powiązanie widoków z adresami URL oraz same widoki decydują o tym, co zostanie zwrócone i pełnią w ten sposób rolę kontrolera. Szablony natomiast decydują o tym, jak to zostanie zaprezentowane użytkownikowi, a więc pełnią rolę widoków w sensie MVC.


Licencja Creative Commons Materiały Python 101 udostępniane przez Centrum Edukacji Obywatelskiej na licencji Creative Commons Uznanie autorstwa-Na tych samych warunkach 4.0 Międzynarodowa.

Utworzony:2022-05-22 o 19:52 w Sphinx 1.5.3
Autorzy:Patrz plik “Autorzy”