Techniki Zaawansowane
3 godz. 43 min · Python · Full-stack i Programowanie
Grzegorz SzymborskiProgramistaJeżeli na samym początku nie przygotujemy dobrze projektu, to gdy wrócimy do niego po dłuższym czasie - czekają nas kłopoty. Jeżeli uda się nam go uruchomić, to rozeznanie się w nim będzie udręką. Prowadzący pokaże Ci jak wyglądają jego produkcyjne aplikacje, na co zwraca uwagę i co pomaga mu trzymać porządek.
Biblioteka pytest posiada wiele ciekawych funkcjonalności. Parametryzowanie testów, fixture i uproszczona składnia pozwalają nam skupić na testowaniu tego, co kluczowe, wydzielając mniej istotne fragmenty kodu. To wszystko sprawia, że w pewnym momencie łatwiej będzie Ci pisać testy, niż ręcznie sprawdzać poprawność działania apki.
Jeżeli aplikacja, którą stworzysz, osiągnie dużą popularność, może się okazać, że przytłoczona dużym ruchem zacznie spowalniać... lub całkowicie przestanie odpowiadać. Opiszemy różne techniki służące temu, by temu zaradzić - od metod select i prefetch related, aż po cache. Na deser przeprowadzimy na stronie test obciążeniowy za pomocą narzędzia locust.
Django i Postgres to świetne połączenie. Framework ten posiada wbudowaną obsługę wyszukiwania pełnotekstowego oferowanego przez tę bazę. Warto wiedzieć, kiedy jej użyć, a kiedy wystarczy zwykłe icontains.
ORM w Django ułatwia mnóstwo operacji. A czasem nie dość to, że ułatwia... to jeszcze przyspiesza! Chcemy zainspirować Cię czterema metodami: annotate, aggregate, bulkupdate i bulkcreate. Gdy pojawią się one w naszym kodzie, zaczniemy doceniać uroki frameworka Django.
Kurs jest stworzony dla osób, które znają już podstawy Django i wiedzą, jak pisać proste strony. Znają modele, widoki, oraz niestraszny im jest Python. Zalecana jest również podstawowa znajomość dowolnej relacyjnej bazy danych. W kursie przedstawiamy niekiedy narzędzia i praktyczne przykłady, jak można ich użyć, ale w celu zaimplementowania konkretnego rozwiązania w projekcie wymagana będzie umiejętność czytania dokumentacji.
Poprzednią lekcję skończyliśmy ze średnio
użytecznym modelem produktu który raczej nie powinien być abstrakcyjny
dlatego usunięty 5 neta klasę i uruchomimy migracja.
Widzimy że teraz utworzyły się trzy modele
utworzy się zarówno produkt książka jak i Bóg.
I teraz bardzo ciekawe jest to co tam działo się pod maską.
Spójrzmy tutaj.
Trzeba wykonać migrację.
Ot i tak mamy trzy tabele Mamy książkę i Bóg i produkt z nimi najpierw do książki.
W książce mamy.
Wskaźnik na produkt mamy b.
Zero zimna i Bóg.
Mamy spis treści i wskaźnik klimatu jeszcze na produkt w produkcie.
Widzimy że są pola rodzica są te bazowe
pola jest tytuł jest cena a w dzieciach jest wskaźnik na ten produkt.
Działa to tak że
w momencie jeżeli pobieramy i Bóg jako automatycznie robi wojna za pomocą
tego wskaźnika do produktu wiek który wiersz konkretnie w produkcie które
dokładnie dane dotyczą tego Buka tej książki którą my chcemy pobrać.
Spróbujmy sobie utworzyć jakąś książkę utworzyć sobie.
Jakiegoś buka i zobaczymy jak on się nam wyświetli.
Jako książkę otworzymy dajmy na to.
Harry'ego Pottera.
Czy musimy być cena obok.
Programowanie w jamie.
Mamy tutaj stworzył się.
Stworzyła się książka i stworzył się i Bóg.
To jest ważne zwróćcie uwagę na to
jakie metody Ester użyliśmy do tej zimy jeszcze raz w produkcie.
Ester to produkt w bloku s t r to i Bóg a w książce to książka.
Mamy tutaj coś takiego czyli wygląda tak jakby wszystko było poprawnie.
Mamy przygotowaną jeszcze.
Listę z produktami które korzystają z takiego seta i.
Spróbujmy je uruchomić.
Widzimy tutaj że mamy
książkę mamy i Bóg czyli wygląda tak jakby wszystko było OK ale pokażę wam pewną.
Bolączka która jest związana z tego typu
dziedziczenia wejdziemy do
listy produktów i zamiast tytułu spróbujmy wypisać reprezentację tego w formie.
Okazuje się że zamiast buka i zamiast książki dostajemy dwa razy produkt.
Tzn.
Gdybyśmy mieli metodę GET Paris która w produkcie byłaby zdefiniowana inaczej niż
w książce inaczej niż w roku dajmy na to byśmy inaczej liczyli jeżeli dostawa
byłaby jakaś inna cokolwiek takiego to wtedy niezależnie od tego.
Co byłoby wpisane w bloku co byłoby napisane w książce.
Zawsze korzystamy z metod i zawsze
korzystamy z properties of który jest w produkcie.
Jest to.
Tzw.
problem Down castingu którego brakuje w domyśle tym secie Django.
To rozwiązanie osobiście mi sprawdza się w
przypadku kiedy mogę w bardzo fajny i dobry sposób wydzielić klasę rodzica i
klasę dziecka gdzie nie zawsze muszę mieć np.
dostęp do metod dziecka gdzie nie zawsze muszę mieć dostęp konkretnie do wszystkich
a jeżeli mam taką potrzebę to po prostu robię inne zapytanie
ewentualnie piszę metodę i w klasie rodzica odwołuje się do dziecka.
Kolejnym problemem z tym rozwiązaniem które jest często poruszane jest brak
kontroli nad nami to znaczy że jeżeli strona rośnie możemy
odczuć drobne spowolnienie strony i nie mieć nad tym kontroli.
Myślę jednak że takie problemy można rozwiązać za pomocą Kesha.
Dlatego jeżeli wasze wymagania spełnia podział na dwie klasy w których
jedna zawiera część funkcjonalności i druga zawiera drugą część i nie muszą one
być używane zawsze jednocześnie to jest to dobre rozwiązanie.