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.
Wyobraź sobie że chcę stworzyć aplikację dla sklepu stworzyła już produkt.
Produkt ma określone pola ma nazwę cenę i wszystkie te pola które zazwyczaj mają
produkty ale dochodzi kolejne wymagania biznesowe.
Okazało się że zaczynacie sprzedawać
książki i zaczynacie sprzedawać e-booki i e-booki.
Po zakupie dniu należy wysłać
na maila książki natomiast powinny mieć pole BN i chciałbym w tym rozdziale
opowiedzieć o dziedziczeniu opowiedzieć w jaki sposób rozwiązywać problemy.
Kiedy mamy jakiś model.
Ale ten model nie do końca spełnia nasze wymagania i jak to zrobić żeby
kot pozostawał czysty i żeby żebyśmy mieli kontrolę nad wydajnością takiego kodu.
Pierwszą z metod.
Która jest.
Jest najprostsza ale przy zbyt dużej liczbie pól.
Jeżeli rozwijamy nasz kod 2.
Jeżeli projekt jest już stary i ma
naprawdę dużo wariantów jest dodawanie pól które mogą być puste.
Tak jak w tym przypadku wyobraźmy sobie że dla książki potrzebujemy numeru USB.
Natomiast dla Buka potrzebujemy URL a ze
spisem treści możemy dodać bezpośrednio w produkcie pole jest Ben.
Może mnie określić jako tekst i możemy też dodać URL dla spisu treści.
Tylko że tworząc jakikolwiek inny produkt.
Te pola muszą być opcjonalne.
Problem pojawi się kiedy będziemy dodawać
pole które może być w tedy takie opcjonalne pole musi.
W przypadku kiedy jest np.
Integer musi być anulowane ponieważ
dodając jakiś inny typ produktu nie chcemy go wypełniać.
I tak w przypadku BN i
spisu treści mamy zwyczajny tekst filtr więc nie jest to problemem ale gdybyśmy
dodawali coś innego to już by mogło być i w tym momencie jeżeli dodajemy książkę
musimy gdzieś na poziomie seriali i zarabiać na poziomie jakiejś libacji
wymusić dodanie tego numeru tak samo dla buka.
I to rozwiązanie jest najprostsze jest bardzo szybkie ponieważ.
Nie wymaga odwołań do zewnętrznych tabel natomiast.
Przy każdym pobraniu dla każdego produktu będziemy pobierać mnóstwo rzeczy w secie
które nas niespecjalnie interesują bo pobierając informacje o płycie
niespecjalnie chcemy mieć link do spisu treści.
Kolejnym sposobem na dodanie dodatkowych typów produktu jest dziedziczenie.
Pierwszym rodzajem dziedziczenia które
chciałbym opisać jest dziedziczenie po klasie abstrakcyjnej.
Nasz model jako abstrakcyjny ustawiamy w
meta klasie za pomocą atrybutów abstrakcji.
Stawia mu go i w tym momencie możemy sobie stworzyć.
Buka który będzie odziedziczył po
produkcie który będzie miał nasze upragnione pole ze spisem treści.
Może tym razem jak URL.
żeby było czytelnie i dodam też.
Metodę TR i zamiast produkt piszemy obok.
Stworzymy analogicznie obiekt z książką
który będzie miał niebawem wrócimy do tekstu.
W tym momencie możemy stworzyć i buka.
W ten sposób możemy stworzyć książkę w ten sposób
i zobaczmy co stworzyło nam się w bazie danych.
Wykonają migracje.
Widzimy że utworzyły nam się dwa modele Bóg i Bóg.
Zwróćcie uwagę że nie utworzył nam się model produktu.
Po wykonaniu migracji zajrzymy do środka bazy danych.
Co się tam tworzyło.
Skorzystamy z.
Przeglądarki baz danych wbudowanej w filharmonii żeby wam pokazać.
Mamy jeżeli chodzi o aplikacje Products.
Mamy dwie tabele buk i Buk zajrzymy sobie
do książki widzimy że utworzyły się zarówno kolumny z modelu produkt jak i
kolumny z modelu książki czyli mamy Twitter mamy prasę i mamy BN.
Wróćmy do.
Klasy produktu.
Jak działa Klasa abstrakcyjna.
Klasa abstrakcyjna dodaje nam swoją funkcjonalność do naszego modelu dziecka.
W tym przypadku do buka
dodaje swoje pola dodaje swoje metody ale nie wymaga tworzenia osobnej tabeli.
Pozwala ona na nie swoich pól do innych modeli.
Bardzo dobrze.
Taki rodzaj dziedziczenia sprawdza się w
modelach które mają jakąś ściśle wydzieloną funkcjonalność.
Weźmy dla przykładu Time stamtąd model z
biblioteki jako model Optimus który dostarcza nam pola klientek i model Fit.
Dzięki temu.
Mamy za pomocą dziedziczenia tylko po jednej klasie.
W przypadku kiedy gdybyśmy zrobili to na przykład tutaj.
Mamy automatycznie dostarczone pole kije
które utworzy nam się w przypadku kiedy tworzymy model który zostanie ustawiony na
moment obecny i pole modlitwy które będzie śledziły nam zmianę.
W ten sposób możemy
bardzo fajnie wydzielać logikę z klas i sprawiać że nasz kot będzie czystsze.
Natomiast dla zastosowania które my chcemy zrealizować w sklepie
to rozwiązanie raczej się nie sprawdzi dlatego że gdybyśmy chcieli.
Widać że mamy model zamówienia który wskazuje na produkt.
To nie moglibyśmy wskazać.
Produktu w sposób uniwersalny nie moglibyśmy wpisać.
Produkt ponieważ jakby na to nie pozwoli musielibyśmy wpisać tutaj
osobno dla każdego typu produktu który chcemy rozszerzyć w tym książkę.
I Bóg.
Itd.
Dlatego korzystanie z takiego rozwiązania jest OK.
W pewnych przypadkach ale w przypadku kiedy byśmy.
Chcieli się odwołać do rodzica
za pomocą ręki MEN albo innej relacji nie jest dobrym pomysłem.