Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Python
Code

Przewodnik dla początkujących do Django Rest Framework

by
Difficulty:BeginnerLength:MediumLanguages:

Polish (Polski) translation by Władysław Łucyszyn (you can also view the original English article)

Więc uczysz się korzystać z Django Web Framework i kochasz to. Ale chcesz atrakcyjny, łatwy w użyciu interfejs API do swojej aplikacji? Nie szukaj dalej niż struktura Django Rest Framework (DRF). DRF jest potężny, wyrafinowany i zaskakująco łatwy w użyciu. Oferuje atrakcyjną wersję API do przeglądania w Internecie oraz opcję zwracania surowego JSON. Struktura Django Rest zapewnia wydajną serializację modeli, wyświetlanie danych przy użyciu standardowych widoków opartych na funkcjach lub uzyskanie szczegółowego widoku z potężnymi widokami opartymi na klasach w celu uzyskania bardziej złożonych funkcji. Wszystko w opakowaniu zgodnym z REST. Wkopmy się.

Kładąc podwaliny

Podczas pracy z aplikacjami Python zawsze dobrze jest przeprowadzić piaskownicę w środowisku wirtualnym. Pomaga zapobiegać kolizji wersji między bibliotekami, których potrzebujesz w swojej aplikacji, a bibliotekami, które mogły już być zainstalowane na twoim komputerze, ułatwia instalowanie zależności w wirtualnym środowisku przy użyciu pliku requirements.txt, a na koniec umożliwia udostępnianie środowiska programistycznego za pomocą inni programiści szybko.

Tuts + ma dwa doskonałe filmy na temat instalacji virtualenv i virtualenvwrapper. Poświęć kilka minut na obejrzenie tych filmów, aby zainstalować virtualenv i virtualenvwrapper na swoim komputerze. Jeśli już je zainstalowałeś, pomiń następną sekcję.

Konfigurowanie środowiska wirtualnego

Pierwszą rzeczą, jaką zrobimy w ramach naszej aplikacji, będzie ustawienie środowiska wirtualnego. Wprowadź następujące polecenia w terminalu.

Nie ma znaczenia, gdzie jesteś w systemie plików, kiedy te komendy są uruchomione. Wszystkie pliki virtualenv są przechowywane w scentralizowanej lokalizacji i uruchamiane na żądanie.

Instalowanie aplikacji Django

Ponieważ ten artykuł nie dotyczy samego Django, zaoszczędziłem trochę czasu, tworząc repozytorium zawierające aplikację, w której będziemy pracować. Jest to prosta aplikacja na półce, która pozwala nam przechowywać listy autorów i książek. Pobierz repozytorium towarzyszące do tego artykułu, do wybranego katalogu, a następnie uruchom plik pip install -r requirements.txt, aby zainstalować wszystkie zależności. Pamiętaj, ab yupewnić się, że aktywowałeś środowisko wirtualne, które skonfigurowaliśmy w ostatnim kroku. Po zakończeniu instalacji powinieneś być w stanie wpisać polecenie fab runserver, aby uruchomić lokalny serwer WWW i otworzyć przeglądarkę internetową wskazującą adres http://127.0.0.1:8000/. Jeśli zobaczysz listę autorów na ekranie, to jesteś gotowy.

Jeśli w którymś momencie nie osiągniesz oczekiwanych rezultatów, spróbuj zmienić gałąź lokalnego repozytorium na finalną, aby zobaczyć wyniki: finał git checkout.

Fab? Co to jest?

Fab == Tkanina, biegacz zadań w języku Python. Z dokumentów:

"Fabric to biblioteka w języku Python (wersja 2.5 lub nowsza) i narzędzie wiersza polecenia do usprawnienia korzystania z SSH do wdrażania aplikacji lub zadań administracyjnych systemu."

Podczas gdy pełniejsza dyskusja na temat Fabric jest poza zakresem tego artykułu, wprowadziłem kilka podstawowych poleceń fab, które ułatwiają pracę z tą aplikacją. Widziałeś polecenie fab runserver. Istnieje również polecenie fab shell, które wywołuje interaktywną powłokę iPython w kontekście aplikacji i polecenia fab syncdb, które uruchamia polecenie syncdb Django, aby zsynchronizować zmiany w modelach z bazą danych.

Praca z serializacją

Jedną z potężnych funkcji programu Django Rest Framework jest wbudowana modelowana serializacja. Za pomocą zaledwie kilku wierszy kodu możesz tworzyć zaawansowane reprezentacje danych, które mogą być dostarczane w wielu formatach. Jak wcześniej wspomniano, nasza aplikacja będzie prostą aplikacją na półce z autorami i książkami. Stworzyłem już dla Ciebie modele Autora i Książki, więc otwórz /app/bookreview/models.py. Istnieje już kilku autorów zapisanych w lokalnej bazie danych SQLite, więc otwórzmy interaktywną powłokę dla naszej aplikacji i przeglądajmy ją. Przejdź do okna Terminala, upewnij się, że znajdujesz się w katalogu ./app i wpisz następujące polecenie.

Po załadowaniu powłoki wprowadź kilka następnych linii, aby pobrać rekord Autora z bazy danych, która właśnie jest moja. Co za zbieg okoliczności. :)

Podobnie można pobrać wszystkie rekordy Autorów z bazy danych za pomocą innej komendy:

Niestety to nie zwraca danych, które może zrozumieć połączenie AJAX. Dodajmy serializer dla autorów. Zamknij powłokę, pisząc quit i otwórz bookreview / serializers.py. Wpisz lub wklej kilka następnych wierszy kodu i zapisz plik.

Nie wprowadzając żadnych zmian, serializator daje nam porą moc. Wracaj do powłoki i sprawdźmy.

Dodajmy jeszcze kilka linii kodu i zobaczmy, co nasz interfejs API pokaże nam w przeglądarce po tym, jak nasze dane zostaną uruchomione przez nasz nowy AuthorSerializer.

Sprawdzanie interfejsu API do przeglądania w Internecie

Najpierw otwórz bookreview / urls.py i dodaj następujący wiersz tuż za trasą index_view:

Następnie otwórz bookreview / views.py i dodaj poniższe linie na końcu pliku:

Następnie dodaj import dla AuthorSerializer na górze strony:

Domyślny widok dla Django Rest Framework to APIView. Pozwala zdefiniować własne metody get, put i delete. Jest to dobry sposób na uzyskanie podstawowej funkcjonalności, ale nadal ma kontrolę nad końcowym wynikiem. W naszym przypadku jednak pozwalamy DRF wykonywać ciężkie dźwiganie, rozszerzając ListAPIView. Musimy tylko podać kilka informacji, aby umożliwić DRF połączenie elementów. Dajemy model autora, aby wiedział, jak rozmawiać z bazą danych, oraz AuthorSerializer, aby DRF wiedział, jak zwrócić te informacje. Będziemy pracować tylko z kilkoma wbudowanymi APIViews, ale możesz przeczytać o wszystkich opcjach na stronie Django Rest Framework.

Po wprowadzeniu tych zmian upewnij się, że serwer działa, wpisując polecenie fab runserver, a następnie wpisz adres URL http://127.0.0.1:8000/authors/. Powinieneś zobaczyć atrakcyjnie zaprojektowaną stronę widoku API, zawierającą listę wszystkich autorów w bazie danych.

Teraz, gdy mamy już widok API autorów, spróbuj podać ten adres URL za pomocą polecenia curl:

Ładne snazzy co?

Nadanie autorom niektórych książek!

Podczas gdy ten widok API jest całkiem sprytny, jest jeden na jeden z bazą danych. Otwórzmy widok API, tworząc bardziej złożony zestaw danych dla autorów, dodając listę wszystkich swoich książek. Otwórz bookreview/serializers.py i dodaj następujący wiersz kodu przed definicją klasy AuthorSerializer.

Zanim będziemy mogli dodawać książki do AuthorSerializer, musimy serializować Książki. Powinno to wyglądać zupełnie znajomo. Ponieważ jest prawie identyczny z AuthorSerializer, nie będziemy o tym dyskutować.

Następnie dodaj następujący wiersz bezpośrednio po instrukcji klasy AuthorSerializer:

Następnie dodaj książki do właściwości pól wewnętrznej klasy Meta AuthorSerializer:

Załaduj ponownie / autorów / punkt końcowy i powinieneś widzieć teraz tablicę książek dla każdego autora. Nieźle jak na kilka linijek kodu eh?.

Dobry facet DRF!

Użyj SerializerMethodField, aby utworzyć niestandardowe właściwości

Serializator jest sprytny ... kiedy wskażemy, który model powinien serializować wewnątrz wewnętrznej klasy meta, wie wszystko o tym modelu ... właściwościach, długościach, wartościach domyślnych i tak dalej. Zauważ, że nie definiujemy żadnej z właściwości znalezionych w modelu bezpośrednio w serializatorze. Wskazujemy tylko, które pola powinny zostać zwrócone do API we właściwości fields.

Ponieważ DRF już wie o właściwościach modelu, nie wymaga od nas powtarzania. Gdybyśmy chcieli, moglibyśmy być wyraźnie w BookSerializer i dodać następujące linie ... a DRF byłby tak samo szczęśliwy.

Metoda serializers.field pozwala wskazać istniejącą właściwość modelu, pole źródłowe i umożliwia jawne nadanie jej nazwy podczas przesyłania do użytkownika końcowego. Ale co z serializerami.SerializerMethodField? To pozwala zasadniczo utworzyć własność niestandardową, która nie jest bezpośrednio powiązana z modelem, którego zawartość jest wynikiem wywołania metody. W naszym przypadku zwrócony zostanie URL zawierający listę miejsc, w których można kupić książkę. Dodajmy teraz tę niestandardową metodę.

Natychmiast po docstrowaniu BookSerializera dodaj następujący ciąg:

Następnie po definicji Meta klasy BookSerializer dodaj następujące linie:

Na koniec musimy dodać naszą nową właściwość do listy pól. Zmień to:

do tego:

Załaduj ponownie / autorów / punkt końcowy i powinieneś zobaczyć URL powracający wraz z innymi informacjami o książce.

Dodawanie punktu końcowego autora

Mamy już listę autorów, ale byłoby miło, gdyby każdy autor miał własną stronę ... tak jak MySpace, prawda? Dodaj punkt końcowy interfejsu API, aby wyświetlić pojedynczego autora. Otwórz adresurls.py i dodaj następujący wiersz po trasie listy autorów:

Następnie otwórz view.py i dodaj następujące wiersze po klasie AuthorView:

Kliknij jedną z nazwisk autorów na stronie indeksu i powinieneś zobaczyć stronę autorów instancji załadowaną.

Refactoring for the Win!

Teraz byłby dobry moment na zrobienie szybkiego refaktoryzacji. Ponieważ Django oferuje opcję nazywania twoich tras, możemy odwołać się do trasy o tej nazwie. Zapobiega to ręcznemu budowaniu adresu URL. Otwórz szablony / index.htmli zamień następującą część:

z tą linią

Zapisywanie danych: pozwól DRF pracować dla Ciebie!

Do tej pory nasza aplikacja była tylko do odczytu. Czas zacząć oszczędzać dane. Otwórz szablony / index.html i dodaj następujące wiersze poniżej nagłówka autorów:

Wpisz nazwę, swoją, jeśli chcesz, a następnie prześlij ... i presto, otrzymasz ... błąd?

DRF nie jest tak magiczny ... czy to prawda?

Otwórz view.py, zmień klasę, która AuthorView rozszerza z generics.ListAPIView na generics.ListCreateAPIView. Następnie spróbuj ponownie. Bum! Jesteś autorem! A nauczyciel czwartej klasy powiedział, że nigdy nic nie osiągniesz. Ale co on wiedział, przez cały dzień musi pracować ze spoconymi skarpetami. Wróć do głównej strony autora, aby zobaczyć swoje imię w świetle.

Co się stało? Domyślny widok interfejsu API użyliśmy tylko dozwolone żądania GET do punktu końcowego autora. Zmieniając go na ListCreateAPIView, powiedzieliśmy DRF, że chcemy również zezwolić na żądania POST. Robi dla nas wszystko inne. Równie łatwo możemy zdefiniować własną metodę wpisu w ramach AuthorView i zrobić tam dodatkowe rzeczy. Może wyglądać tak:

Należy pamiętać, że podczas gdy DRF wymusza integralność baz danych na podstawie właściwości modelu, nie ustalamy żadnego zabezpieczenia, kto może uzyskać dostęp do tego formularza lub korzystać z niego. Zezwalanie na bezpieczeństwo, logowanie i zarządzanie uprawnieniami jest poza zakresem tego artykułu, ale wystarczy powiedzieć, że DRF ma funkcjonalność umożliwiającą dostęp do widoków, z którymi pracowałeś, a konfiguracja jest dość banalna.

Kończąc

Dowiedziałeś się już sporo o strukturze Django Rest Framework: jak zaimplementować interfejs API widoczny w Internecie, który może zwrócić JSON za Ciebie, jak skonfigurować serializery do komponowania i przekształcania danych oraz jak używać widoków opartych na klasach do abstrakcji kod na płycie głównej.

DRF ma w tym coś więcej niż kilka bitów, które udało nam się objąć, ale mam nadzieję, że okaże się przydatny dla twojej następnej aplikacji.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.