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.
Tym rozdziale zajmiemy się Django oraz.
Pokażę wam jak za pomocą kilku metod jak za pomocą niektórych funkcji
przyspieszyć naszą aplikację bądź poprawić czytelność kodu.
W pierwszej reakcji zajmiemy się metodą agregatów i notatek.
Metoda agregatów.
Jest to metoda która za pomocą klauzuli grubej w bazie danych przelicza nam
wartości za pomocą podobnej klasy klasą to może być nawet klasa KOD która będzie nam
zdradzała obiekty klasa min która będzie przyciągała najmniejszy obiekt i klasa
V G która będzie pokazywała średnią wartość przygotowałem.
Model artykułu który
ma w sobie pole rating stworzyłem trzy artykuły które łącznie dają nam wynik 10.
Są to więc średnia powinna wyjść 3.3 i napiszemy.
Prostego seta którym wyciągniemy średnią dla autora Jana Kowalskiego.
Importuje niezbędne modele.
Na początku będą to modele w naszej aplikacji.
Będzie to auto.
Możemy autora od razu pobrać.
Jako tylko jeden możemy wykonać metodę GET.
Się pojawił.
Pojawił się i.
Teraz importuje sobie metody po których będziemy właściwie klasy
w których będziemy używali do agregatów danych.
Pobieramy je z biblioteki ang.
Models i weźmiemy sobie.
3.
W tym momencie.
Możemy na przykładzie artykułów autora który ma na imię Art Cars.
Jak widzicie pobrać wszystkie artykuły.
A po bierzmy sobie średnią ocenę.
Może od razu pokaże wam że nie musimy ograniczać się tylko do jednego pola
możemy w jednym zapytaniem w jednej metodzie agregaty użyć kilku parametrów.
Użyjemy minimalnej oceny.
Maksymalnej.
Oraz.
średniej.
Widzę że zapomniałem dopisać.
Max sprawdźmy dostaliśmy oczekiwany wynik.
Jaka może być pułapka w lecie.
Zazwyczaj wersety w Django są wykonywane leniwie tzn.
Jeżeli budujemy Gwardii seta linia po
linii mamy do niego jakieś filtry eks kluby jakieś robimy rzeczy na bieżąco.
To ten gwar i set wykonuje się jedynie
na samym można powiedzieć na samym końcu w momencie jeżeli go o to poprosimy jeżeli
go gdzieś użyjemy danych spróbujemy go wykonać w jakiś sposób rzutować na listę.
Natomiast z agregaty jest nieco inaczej.
Agregat wykona nam zapytanie do bazy danych w momencie jak zostanie
zdefiniowane czyli dokładnie w tej linii C w której go użyjemy.
Kolejną szalenie użyteczna metodą wygranego jest notatek a notatek
pozwala w locie na poziomie resetu na poziomie bazy danych dodać nam kolumnę do
wyników i w najprostszym przypadku można to pokazać na przykładzie aliansu dla pola
gdybyśmy chcieli żeby artykuł zwracał nam pod inną nazwą.
Czasem uwierzcie mi
są takie przypadki kiedy musimy dopasować nasze zapytanie do
jakiegoś serialu od zera czegoś czego nie możemy za bardzo zmieniać ponieważ
wprowadzić zbyt wiele zamieszania w naszej stronie.
W naszym projekcie to niekiedy wygodniej jest za pomocą adnotacja zmienić nazwę i.
Jakoś mamy tutaj za importowane wszystkie.
Modele z importu jemy tylko z tego samego pakietu Django DB Models.
Funkcję AF i.
Spróbujemy zanotować do autora nazwę.
Jako coś innego robimy to w ten sposób że.
W metodzie w parametr jako klucz.
Podajemy.
Nazwę kolumny.
Natomiast jako wartość podajemy klasę.
Funkcyjne i tutaj będzie.
Pozornie nic się nie zmieniło natomiast kiedy.
Wyciągniemy autora to okaże się że będzie on miał dostępne pole Another title.
Zobaczcie w przypadku kiedy bym.
A nie użył.
Dostałbym wyjątek.
Oczywiście zastosowania tej tu nie kończą się na tak prostym przykładzie.
Jeżeli oglądaliście lekcję o wyszukiwaniu nowych torach to
pewnie wiecie że za pomocą tata dodałem wektor do gwary seta.
Pokażę wam teraz jak za pomocą a tata zrobić coś bardzo podobnego co zrobiliśmy
agregaty czyli pobierając autorów dodamy im kolumnę z średnią oceną ich artykułów.
Będzie to niemal identyczna.
Jak to co zrobiliśmy wcześniej.
Wpisujemy Anno taty i używamy Article les.
Przypisany do autora.
To spróbujemy.
Tak nie mam jeszcze autora mamy QWERTY.
Natomiast kiedy bierzemy konkretnego autora dostajemy średnią ocenę.
Możemy pójść jeszcze głębiej i przeforsować.
Te artykuły po których będziemy wyciągać średnią.
Do tego celu będziemy potrzebowali.
Za importować klasę Q.
W tym miejscu wpisujemy filtr.
Po określonym polu.
Weźmy na przykład obliczanie średniej tylko wtedy jeżeli.
Ich ocena jest większa niż 2.
Musimy mieć art rating.
Powinno się zmienić i się zmieniło.
Co ciekawe ten sam rezultat co frustrujące wewnątrz.
Klasy A V g osiągniemy filtrów.
Po całym świecie spójrzcie jeżeli użyjemy filtra w ten sposób.
Jeżeli ponownie.
Okazało się że jednak nie.
Znaczenie ma również kolejność a ta ich kolejność filtra.
Spuścizna.
A notatka bazuje na tym pytaniu które już skonstruowali za pomocą RMUA.
Pokażę wam jeszcze jedno całkiem fajne
zastosowanie funkcji f jeżeli w artykule byśmy mieli liczba wyświetleń.
Która byłaby darem i którą chcielibyśmy remontować przy każdym otwarciu strony.
To w celu przyspieszenia całej operacji
możemy użyć funkcji f czy pokazuje w jaki sposób.
Możemy.
Jaką liczbę przypisać funkcje f.
Która będzie zawierała.
Wskazanie na to pole i dodamy tutaj jedynkę.
W tym momencie jak to zapisane.
To może zobaczcie jak by to wyglądało
tradycyjnie gdybyśmy zamiast funkcji f użyli Self juz
Django wykonały dwa kroki w pierwszym kroku pobrało by
liczbę aktualnych odsłon dałby jeden przeszło by dalej zapisało by.
Natomiast kiedy zrobimy to w ten sposób
to Django wyśle do bazy danych informację że
w momencie zapisania pobierz wartość z pola wóz dodaj 1
i zapisz czyli jest to wykonane w tym samym momencie w którym się zapisuje i
jest to bardziej odporne na sytuacje kiedy wielu użytkowników wejdzie
na stronę i będziemy mieć niepoprawny wynik odsłon.