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.
Przygotowałem funkcję która pobiera z strony IP dot com nasze zewnętrzne IP.
Strona wygląda w ten sposób
że jest on jest klucz IP i ten klucz zwracam właśnie funkcji.
Teraz zajmiemy się testami dla tej właśnie funkcji.
Testowanie zewnętrznych usług nigdy nie jest proste i raczej nie powinniśmy.
Pisać testów które będą odwoływała się do
tych zewnętrznych adresów będą odbywały jakieś zewnętrzne serwery itd.
Ponieważ testy będą trwały wtedy dużo
dłużej a w przypadku kiedy korzystamy z API które jest płatne za każdy request to
wtedy możemy podczas uruchamiania testów mieć niekontrolowane zbędne wydatki.
Aby jednak jakoś tę funkcję przetestować używa się do tego Maków.
Jest to technika która w locie odmienia
wartość którą zawraca jakaś konkretna metoda.
W tym przypadku zamkniemy co właściwie mamy.
Mamy bibliotekę Request która
odczytuje ten adres i robi to za pomocą metody GET to widzimy że mamy Response
który został zwrócony który posiada metodę Jackson zamieniając ją.
Kontent który otrzymaliśmy w słowniki ze słownika z pobranych już IP.
Jeszcze istotna sprawa żeby ta funkcja
działało oczywiście trzeba zainstalować bibliotekę request.
Pokażę wam teraz jak się do tego zabrać.
Deklarujemy naszą funkcję z testem za pomocą biblioteki mog.
A konkretniej paw obiekt w którym jako pierwszy parametr podajemy
pakiet w którym będziemy chcieli dokonać modyfikacji w locie.
W tym przypadku to będzie pakiet request.
W drugim podajemy metodę zamkniemy jeszcze raz mamy Request mamy Get.
Pierwszy parametr w naszym
teście będzie się odnosił do metody którą czujemy teraz to na czym nam zależy.
To modyfikowanie wartości.
Którą zwraca ta funkcja.
Gdybyśmy tutaj dali np.
1 to wtedy.
Response miałby wartość 1.
Oczywiście wyskoczyła nam wtedy błąd
ponieważ nie można wykonać czy jest ona na jedynce i to co musimy zrobić.
I teraz musimy przygotować coś co będziemy zwracać coś co będzie miało metodę Sony.
Napiszemy bardzo prostą klasę Response która nie będzie przyjmowała.
Tego naszego fikcyjnego Jacksona.
Będzie go przypisywana i będzie posiadała metodę że jest on
analogicznie jak ten z Response i to co tutaj musimy zrobić.
To jest po prostu zwrócić część sama w tym momencie.
Chcemy żeby w funkcji gier zawsze zwracane były ten mrok
i żeby on miał dane więc myślałem sobie że wszystko było zgodne z prawdziwym API.
Tylko modyfikuje adres IP na jakieś inne.
I w tym momencie możemy sprawdzić czy funkcja Get ma IP faktycznie.
Zwraca to co zajmowaliśmy.
Uruchomimy też.
Przeszło jest na tyle ważne że jeszcze pokaże bagaże.
Co dokładnie tam dostaniemy.
I tak jak.
Się spodziewaliśmy.
Jest teraz pomysł.
Oczywiście przykład z pobieraniem IP jest dość prosty ale znajdują bardzo szerokie
zastosowanie jeżeli włączymy naszą stronę z platformami do płatności np.
takimi jak PayU takimi jak do tej gdzie
musimy oczekiwać jakiejś struktury musimy sprawdzić czy poprawnie
rozpracować umiemy i nie możemy wysyłać tego naprawdę na serwer.