Dobre praktyki w Django REST Framework

Slides:



Advertisements
Podobne prezentacje
BIRT.
Advertisements

Projektowanie warstwy serwera DisplayTag. Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu.
Piotr Kasprzyk Instytut Informatyki Politechniki Śląskiej
Integracja aplikacji z Facebookiem
Neo4J z Django Mateusz Kieblesz MATURZYSTA INŻYNIER MAGISTER DOCTOR
Robi bo musi, czy Ruby bo lubi?
Microsoft Dynamics CRM jako platforma deweloperska
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 8.
Specjalizacja "Dziennikarstwo On-line„ asynchroniczny JavaScript i XML – AJAX Część 6 Prowadzący: Dariusz Jaruga
Windows 8.1 dostarcza spójną platformę do tworzenia aplikacji, które potrafią dostosować się do wielu urządzeń Zaprojektowane raz, działają.
Responsywne aplikacje w Windows 8 i.NET 4.5 Jakub Binkowski.
Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 5.
Dziecko z zaburzeniami rozwoju w szkole masowej – uwagi praktyczne.
Po co mi te Normy? Prezentacja: Dominik Berliński.
INSTA 4 IV Liceum Ogólnokształcące im. Tadeusza Kościuszki w Toruniu.
Jeśli chcesz przejść do konkretnego zagadnienia, wybierz je z listy: Dopisanie narzędzia Modyfikacja narzędzia Usunięcia narzędzia Lokalizacja domyślna.
ZABRZAŃSKI RYNEK PRACY – FORMY AKTYWIZACJI OSÓB BEZROBOTNYCH I POSZUKUJĄCYCH PRACY Zabrze, Powiatowy Urząd Pracy w Zabrzu.
Marcin Gliński Instytut Języków Romańskich i Translatoryki UŚ Regionalny Ośrodek Doskonalenia Nauczycieli WOM w Katowicach NOCNE POWTÓRKI MATURALNE 2016.
Coaching w poradnictwie zawodowym i edukacji. PLAN Definicja, proces - zmiana Możliwość wykorzystania coachingu w poradnictwie zawodowym i edukacji Model.
European and national traditions in the art of theatre – International Theatre Performance Prezentacja europejskiego projektu teatralnego realizowanego.
© 2014 IBM Corporation COMMON POLSKA 2014 JDBC z IBM System i Tomasz Piela & Marcin Wilk Global Technlonogy Services, IBM.
Po pierwsze: Bądź odważny! Weź los w swoje ręce, w końcu do odważnych świat należy. Niech Twoja odwaga nie oznacza jednak podejmowania ryzyka bez analizy.
BIG DATA Przetwarzanie i analiza zbiorów danych w czasie rzeczywistym Marcin Żuchowski SKILLSLEASE Sp. z o.o. |
Friedrich Nietzsche Aforyzmy NAD BRAMĄ MEGO DOMU Dom na mieszkanie własny mam, w niczym nie biegłem w cudzy ślad, - każdego mistrza-m wyśmiał rad, który.
Apteka Oliwna Jak poprawnie złożyć zamówienie
Kamil Herba Juliusz Sompolski 2 marca 2009 ASDL: wyciąganie literatury budowa serwisu.
, + - = 0,5 CZYTAJ DOKŁADNIE ZADANIA I POLECENIA. IM TRUDNIEJSZE ZADANIE, TYM BARDZIEJ WARTO JE PRZECZYTAĆ KILKA RAZY.
API jądra do obsługi przestrzeni użytkownika Co jest tematem tej prezentacji: Transport danych pomiędzy przestrzeniami użytkownika i jądra (asm/uaccess.h)
Biblioteka oferuje dostęp do posiadanych przez nią wszystkich baz elektronicznych przez zakładkę Bazy danych A-Z. Po wybraniu bazy wybieramy jej ikonę,
Język Java Paweł Rajba
PRAWA DZIECKA Nikt nie może mnie poniżać krzywdzić, bić, wyzywać.
Hoopl Higher-order optimization library
Dzień dobry! Witamy na stanowisku I&V (Integracja i Weryfikacja)
Rola książki w życiu człowieka
Krzysztof Ciebiera na podstawie
Zarządzanie listą zadań w Microsoft Project
Mikołaj Radwan JUnit Mikołaj Radwan
Realizacja aplikacji internetowych
Śledzenie projektów w Microsoft Project
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
Fotografia cyfrowa wykład podejście programisty
Moje szczęście.
Przetwarzanie języka Wprowadzenie do informatyki Jerzy Nawrocki
Wstęp do Informatyki - Wykład 8
Zarządzanie projektami
Kurs języka C++ – wykład 13 ( )
10 kroków do zmiany nawyków
Technologie internetowe Zofia Kruczkiewicz
ŚPIEWAĆ KAŻDY LUBI.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Managed Service Identity dla zasobów w Microsoft Azure
Bezpieczeństwo dostępu do danych w systemie Windows
Języki programowania.
AOP – Aspect Oriented Programming
Dynamics 365 CE i język TypeScript
Program profilaktyczno-wychowawczy
Niebezpieczeństwo na każdym kroku
Zakładanie konta Konta nie trzeba zakładać jeżeli zaczyna się ponownie studia (konta są aktywne cały okres studiów)
Broszura firmy To miejsce jest doskonałe na określenie misji firmy
Konfiguracja aplikacji sieciowej
Podstawy informatyki Zygfryd Głowacz.
NEMERLE Michał Maliszewski.
Damian Urbańczyk Edytory WYSIWYG.
J2EE: Bazy danych c.d. Język zapytań EJB QL.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Zaangażowanie społeczne
AKTYWIZUJĄCE METODY NAUCZANIA i UCZENIA SIĘ DOROSŁYCH
Pomocnik rolnika HashCode 1 Cover page
Instrukcja podpięć przedmiotów w USOSie
Python 3 Wprowadzenie.
Zapis prezentacji:

Dobre praktyki w Django REST Framework Dominik Kozaczko, PyWaw #75 dominik@kozaczko.info

Trochę o sobie w Pythonie od 2005 roku; w Django od 2006 wraz z uczniami przetłumaczyłem “Byte of Python” uczyłem Pythona w liceum zanim to stało się modne ;) zainicjowałem akcję “Python na maturze” (kudos dla CEO) uczę Pythona i Django na YouTube - youtube.com/dekoza

Plan prezentacji Czym jest “framework” i dlaczego się go używa? Najczęstsze błędy podczas używania DRF. Wujek Dobra Rada Co dalej? Podsumowanie.

Czym jest “framework” i dlaczego się go używa? przyspiesza tworzenie kodu posiada domyślny scenariusz użycia łatwość rozbudowy

Najczęstsze błędy podczas używania DRF. Django REST Framework jest bardzo złą biblioteką, jednak do tej pory nie wymyślono niczego lepszego. – Dominik Kozaczko

Najczęstsze błędy podczas używania DRF. nieprzeczytanie samouczka (tutoriala) rozpoczęcie czytania samouczka kodowanie w trakcie czytania

Wujek Dobra Rada - start Używaj cookiecutter-django Docker (jeśli wybierzesz) SSL świetna domyślna struktura i konfiguracja projektu testy dokumentacja deployment

Wujek Dobra Rada - CRUD Robiąc CRUD dla modeli używaj ModelViewSetów, ModelSerializerów i Routerów: # models.py class Team(models.Model): name = models.CharField(max_length=60) members = models.ManyToManyField(settings.AUTH_USER_MODEL) # serializers.py class TeamSerializer(serializers.ModelSerializer): class Meta: model = Team fields = '__all__'

Wujek Dobra Rada - CRUD Robiąc CRUD dla modeli używaj ModelViewSetów, ModelSerializerów i Routerów: # api.py (aplikacji) class TeamViewSet(viewsets.ModelViewSet): queryset = Team.objects.all() serializer_class = TeamSerializer # api.py (globalny) router = SimpleRouter() router.register('teams', TeamViewSet) # urls.py (globalny) urlpatterns = [ url(r'^api/v1/', include(router.urls)) ]

Wujek Dobra Rada - embed/expand https://github.com/silverlogic/djangorestframework-expander Trochę anty-REST, ale praktyczność przeważa nad konsekwencją. # serializers.py class MemberSerializer(ModelSerializer): ... class TeamSerializer(ExpanderSerializerMixin, ModelSerializer): class Meta: model = Team fields = '__all__' expandable_fields = { 'members': (MemberSerializer, (), {'many': True}), }

Wujek Dobra Rada - dynamiczne pola https://github.com/dbrgn/drf-dynamic-fields class UserSerializer(DynamicFieldsMixin, ModelSerializer): class Meta: model = User fields = ('id', 'first_name', 'last_name', 'email') GET /url/users/1?fields=id,email GET /url/users/1?omit=email

Wujek Dobra Rada - paginacja LimitOffsetPagination lub: https://github.com/tbeadle/django-rest-framework-link-header-pagination najlepiej połączyć oba podejścia: class SwitchableHeaderPagination(LimitOffsetPagination): def get_paginated_response(self, data): next_url = self.get_next_link() previous_url = self.get_previous_link() if self.request.META.get('HTTP_X_PAGINATION') == 'header': headers = {'Total-Count': self.count} if next_url is not None and previous_url is not None: link = '<{next_url}>; rel="next", <{previous_url}>; rel="prev"'

Wujek Dobra Rada - filtrowanie # api.py (aplikacji) from django_filters.rest_framework import DjangoFilterBackend class TeamViewSet(viewsets.ModelViewSet): queryset = Team.objects.all() serializer_class = TeamSerializer filter_backends = (filters.OrderingFilter, DjangoFilterBackend)

Wujek Dobra Rada - uprawnienia https://github.com/dbkaplan/dry-rest-permissions class SomeModel(models.Model): ... def has_objec_read_permission(self, request): # logika return True

Wujek Dobra Rada - drobiazgi throttling (ograniczanie odpytywania) uwierzytelnianie: token (warto przez OAuth2) używać błędów HTTP z dokładniejszą rozpiską w treści testy integracyjne NAPRAWDĘ odpytujące API

Co dalej? GraphQL nie żartuję :) graphene-django

PODSUMOWANIE

DZIEKUJĘ!