|||

Django – #35 – REST API cz. 10 – Nadpisywanie zachowań metod przed/po operacji zapisu/usuwania

Wprowadzenie.

Kolejną ważną rzeczą, którą należy znać, jest poznanie sposobu nadpisywania metod, które są wykonywane przed lub po operacji zapisu/usunięcia rekordu. Dzięki tej funkcjonalności jesteśmy w stanie na przykład przypisać lub nadpisać dane pole określoną wartością, możemy również z tego miejsca wysłać maila potwierdzającego jakąś czynność lub też wykonać inne działanie, które będzie wymagane przez nasze API.

  • perform_create(self, serializer)
  • perform_update(self, serializer)
  • perform_destroy(self, instance)

Informacji o powyższych funkcjach znajdziemy pod tym linkiem.

  1. Django REST API cz. 1– Tworzenie nowego projektu 
  2. Django REST API cz. 2 – ListAPIView 
  3. Django REST API cz. 3 – Wbudowana strona logowania
  4. Django REST API cz. 4 – Widoki generyczne
  5. Django REST API cz. 5 – ListCreateAPIView i konfiguracja dostępu
  6. Django REST API cz. 6 – Uszczegóławianie odpowiedzi  
  7. Django REST API cz. 7 – Określenie z góry wartości danych
  8. Django REST API cz. 8 – RetrieveDestroyAPIView
  9. Django REST API cz. 9 – RetrieveUpdateAPIView 
  10. Django REST API cz. 10 – Nadpisywanie zachowań metod przed/po operacji zapisu/usuwania ⇐ 
  11. Django REST API cz. 11 – Rejestracja nowego użytkownika poprzez API  
  12. Django REST API cz. 12 – Uwierzytelnianie przy pomocy Tokena 
  13. Django REST API cz. 13 – Generowanie tokena dla istniejących użytkowników

Zakres artykułu.

  • Nadpisywanie zachowań metod przed/po operacji zapisu/usuwania.

Nadpisywanie zachowań metod przed/po operacji zapisu/usuwania.

Załóżmy sobie, że mechanizm zwracania książek ma działać w taki sposób, aby data zwrotu była uzupełniana automatycznie po wysłaniu formularza dotyczącego zwrotu książki. W tym celu stwórzmy nowy Serializer, który będzie zawierał tylko jedno pole 'id’ z modelu Borrow

Następnie zaimportujmy nowo napisany serializer oraz jednocześnie zaimportujmy wbudowany moduł odpowiedzialny za działania na czasie i dacie from django.utils import timezone

Napiszmy teraz klasę widoku odpowiedzialną za zwracanie książek. Wprowadźmy ograniczenie dostępu tylko dla autoryzowanych osób oraz nadpiszmy klasę put(), w której dodamy filtr, abyśmy mogli tylko zwrócić tylko nasze pozycje. Nowością w tym miejscu jest nadpisanie klasy perform_update(), w której to zamieścimy wyrażenie odpowiedzialne za przypisanie aktualnej daty do pola instancji return_date serializera BorrowReturnBookSerializer. Następnie musimy pamiętać o koniecznym wywołaniu metody zapisu save().

Na koniec napiszmy ścieżkę do widoku nowo stworzonej klasy path(’api/borrows//return/’, views.BorrowReturnBookUpdate.as_view()).

W tym momencie możemy przejść do przeprowadzenia testów funkcji zwrotu książek. W tym celu wprowadźmy do przeglądarki adres 127.0.0.1:8000/api/borrows/.

Załóżmy, że chcemy oddać pozycję o id 11, wówczas w przeglądarce musimy wprowadzić adres 127.0.0.1:8000/api/borrows/11/return/.

Jak widźmy w miejscu formularza znajduje się jedynie przycisk PUT, który jest odpowiedzialny za wysłanie formularza metodą PUT

Po wysłaniu formularza otrzymamy dane zwrotne z numerem id, na której została wykonana metoda PUT. Następnie wprowadźmy adres z listą wypożyczeń.

Jak widzimy data zwrotu do pozycji z id 11, została wprowadzona automatycznie. 

W tym miejscu możemy jeszcze sprawdzić, czy czasem nie możemy zwrócić książki, która nie należy do nas.

Wybierzmy teraz pozycję o id 2 i naciśnijmy przycisk PUT.

Jak możemy zobaczyć, otrzymaliśmy informację zwrotną, że nie jesteśmy właścicielami tego wypożyczenia. Dla pewności przejdźmy jeszcze do listy wypożyczeń. 

Jak widzimy, data zwrotu nadal ma wartość null.

Na koniec możemy jeszcze wrócić do serializera odpowiedzialnego za wypożyczenie, gdzie wprowadźmy dla porządku, abyśmy nie mogli wpisywać daty zwrotu.

Sprawdźmy, czy teraz podczas wypożyczenia nie ma pola z datą zwrotu.

Jak możemy zauważyć, teraz gdy wypożyczamy książkę, mamy jedynie pozycję Book id, która dla przypomnienia wskazuje, którą książkę mamy zamiar wypożyczyć.

  1. Django REST API cz. 1– Tworzenie nowego projektu 
  2. Django REST API cz. 2 – ListAPIView 
  3. Django REST API cz. 3 – Wbudowana strona logowania
  4. Django REST API cz. 4 – Widoki generyczne
  5. Django REST API cz. 5 – ListCreateAPIView i konfiguracja dostępu
  6. Django REST API cz. 6 – Uszczegóławianie odpowiedzi  
  7. Django REST API cz. 7 – Określenie z góry wartości danych
  8. Django REST API cz. 8 – RetrieveDestroyAPIView
  9. Django REST API cz. 9 – RetrieveUpdateAPIView 
  10. Django REST API cz. 10 – Nadpisywanie zachowań metod przed/po operacji zapisu/usuwania ⇐ 
  11. Django REST API cz. 11 – Rejestracja nowego użytkownika poprzez API  
  12. Django REST API cz. 12 – Uwierzytelnianie przy pomocy Tokena 
  13. Django REST API cz. 13 – Generowanie tokena dla istniejących użytkowników

Autor artykułu
Dominik Bednarski

Podobne wpisy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *