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.
Jeżeli miałeś kiedyś potrzebę tworzenia dużej ilości jednakowych modeli
w którymś miejscu to mogłeś zauważyć że wraz z tym jakich przybywało wzrastał czas
odpowiedzi i wszystko działało coraz wolniej.
Pokażę w tej lekcji metodę Ball GT która pozwoli niezależnie od tego jak duże
rzeczy chcemy stworzyć naraz stworzyć je błyskawicznie w tym samym czasie.
Przygotowałem klasę Event która.
W momencie zapisania tworzy
tworzy model daty dla każdego dnia w którym ten event występuje.
Event jest oznaczony datą od do.
Czyli na przykład dodajemy coś co dzieje
się wydarzenie które dzieje się przez cały miesiąc codziennie
a event dat będzie naszym takim modelem do którego będziemy mogli się odwołać jeżeli
będziemy chcieli dostać się do konkretnej daty np.
będziemy chcieli docelowo kupić bilet na konkretny dzień.
Jest to oczywiście
bardzo prymitywny wariant wydarzenia ale powiem wam że czasem stosuje taki
patent jeżeli potrzebuje zrobić wydarzenie które trwa ileś dni.
Obecna implementacja wygląda tak że w metodzie sejf przed nią usuwając
wszystkie daty i steruje po wszystkich dniach ta funkcja
zwraca generator ze wszystkimi dniami pomiędzy tymi datami kiedy
tu ukryli byśmy pierwsi lipca tu trzeci to dostali byśmy pierwszy 2 3 lipca.
W ten sposób byśmy stworzyli trzy razy i
datę zajrzymy do panelu administratora i stwórzmy jakieś.
Przykładowy event.
Przykładowe wydarzenie które będzie trwało jak będzie cały miesiąc.
I przed tym jak piszemy Chcę Wam pokazać co dzieje się w bazie danych.
Dlatego.
Zaznaczył flagę która nam zablokuje przekierowania.
Teraz wam pokażę jak to działa.
W momencie kliknięcia sejf tradycyjnie
zapisze nam się obiekt i zostaniemy przekierowanie na listę z efektami
i wtedy dostaniemy w barze werset dotyczący tej listy.
My chcemy dostać natomiast queer i set dotyczące zapisywania naszego obiektu.
Widzimy że zostało przechwycone widzimy że mamy 37 zapytań do bazy danych
i co tutaj się dzieje mamy jakieś informacje które nas nie interesują.
Mamy usuwanie wszystkich dat
to jest szybkie fajne i mamy po kolei dla każdej daty którą chcemy dodać osobną.
Wyobraźmy sobie gdybyśmy chcieli dodać naprawdę dużo wydarzeń gdyby komuś pomylił
się datę piłkarze rok i wybrałby dwa tysiące dat.
Nie będę wam pokazywał tego w tym kursie
ponieważ selekcja by znacząco się wydłużyła.
Ale.
Do tego właśnie żeby zoptymalizować taki przypadek służy nam bank Credit.
Zmienimy ten sposób tworzenia taki i inny event date na.
Coś takiego.
Tworzymy listę i po każdej operacji.
Do tej właśnie listy napędów chcemy.
Obiekt klasy I Want Date który będzie posiadał.
Te parametry.
Na tym etapie i tak nam się nie stworzy
nie będziemy mieli jeszcze żadnych dat w bazie danych i do tego właśnie celu
wykorzystamy metodę dostępną w Manchesterze
która nazywa się bank Credit do metody bank Credit właśnie.
Damy temu listę
to widzimy że jednym z parametrów jest bat szajs który pozwala nam na ustalenie ile
za jednym razem ma się dodawać do bazy danych obiektów.
Ponieważ jeżeli do Eski lata zaczniemy dodawać dziesiątki tysięcy obiektów to
jest olbrzymia szansa że baza zostanie zablokowana.
Sprawdźmy co się stanie w tym momencie.
Przejdźmy z powrotem do listy.
Dodajmy kolejne wydarzenie tym razem będzie to długie wydarzenie.
I żeby się nie ograniczać.
Stany kilka miesięcy w przód.
Nie widzieliście ale tym razem trwało to znacznie szybciej.
I pomimo tego że zaznaczyli się około
czterokrotnie więcej dat to zapytań mamy czterokrotnie mniej.
Widzimy że.
W tym momencie wszystkie daty zostały utworzone za pomocą jednego zapytania.
Według mnie
dobrym pomysłem jest zwrócenie uwagi na to w którym miejscu w naszym projekcie możemy
włożyć bank klient ponieważ jeżeli tworzymy za pomocą standardowej metody
gdzieś obiekty które zależą od tego co wprowadzi użytkownik.
Ilość tych obiektów od tego zależy to strona może nam nieoczekiwanie zwolnić.
Możemy tego nie zauważyć na samym początku ale użytkownicy z biegiem czasu pewnie
znajdą to najgorsze miejsce i sprawią że strona zacznie działać wolniej.