Django Rest Framework Dersleri-5

ders5.md

Django Rest Framework Notlarım

Relational Operations (İlişkisel Operasyonlar)

  • Bu dersimizde Book adında bir model class daha ekleyeceğiz. Her kitap bir kütüphaneye ait olacak ve her kütüphanede birden fazla kitap bulunabilecek şekilde model sınıflarını tanımlayıp ilişkilendireceğiz.
  • apitr/model.py içerisini aşağıdaki gibi düzenleyelim
class Library(models.Model): name = models.CharField(max_length=120) class Meta: db_table = 'library' def __str__(self): return self.name class Book(models.Model): name = models.CharField(max_length=120) library = models.ForeignKey(Library, on_delete=models.CASCADE, null=True) class Meta: db_table = 'book' def __str__(self): return self.name
  • Gördüğünüz üzere Book sınıfının name adında ve library adında iki adet alanı bulunuyor. library alanı hangi kütüphaneye ait ise bu kitap onun referans alanı olacaktır.
  • Terminalden aşağıdaki komutları vererek model sınıfını veritabanına gönderelim.
(env) adnan@ce:~/arge/drf/trdrf$ python manage.py makemigrations apitr Migrations for 'apitr': apitr/migrations/0004_book_library.py - Add field library to book (env) adnan@ce:~/arge/drf/trdrf$ python manage.py migrate Operations to perform: Apply all migrations: admin, apitr, auth, contenttypes, sessions Running migrations: Applying apitr.0004_book_library... OK (env) adnan@ce:~/arge/drf/trdrf$ python manage.py runserver ... .....
  • Şimdi Book modeli için uygun serializer classını yazalım. apitr/serializers.py modülünü açıp aşağıdaki sınıfı ekliyoruz.
# dahili importlar from apitr.models import Library, Book class BookSerializer(serializers.ModelSerializer): class Meta: model = Book fields = ('id', 'name', 'library') #fields = '__all__' # bunu da kullanabilirsiniz
  • Şimdi Book sınıfı için views sınıflarını yazalım. apitr/views.py modülünü açıp aşağıdaki sınıfları ekliyoruz.
# dahili importlar from apitr.models import Library, Book from apitr.serializers import LibrarySerializer from apitr.serializers import BookSerializer class LibraryList(generics.ListCreateAPIView): ... class LibraryDetail(generics.RetrieveUpdateDestroyAPIView): ... class BookList(generics.ListCreateAPIView): queryset = Book.objects.all() serializer_class = BookSerializer class BookDetail(generics.RetrieveUpdateDestroyAPIView): queryset = Book.objects.all() serializer_class = BookSerializer
  • Şimdi URL tanımını yapalım. apitr/urls.py modülünü açıp aşağıdaki satırları ekleyelim.
from apitr.apiviews import BookList, BookDetail urlpatterns = [ path('libraries/', LibraryList.as_view()), path('libraries/<int:pk>', LibraryDetail.as_view()), path('books/', BookList.as_view()), path('books/<int:pk>', BookDetail.as_view()), ]
  • Şimdi uyguladığımız sınıflar için CRUD(Create, Retrieve, Update, Delete) işlemlerini gerçekleştirelim.
  • Tarayıcınızı açıp http://127.0.0.1:8000/apitr/books/ adresinizi yazarsanız en altta Name ve Library alanlarını göreceksiniz. Daha önce eklediğiniz Library kayıtları dropdown(combobox) içerisinde listelenir. Name alanına da istediğiniz kitap ismini verip kaydı gerçekleştirebilirsiniz.
  • Postman kullanarak da aşağıdaki gibi üstteki URL adresine POST request yapabilirsiniz.
{ "library":6, "name" : "Kitab-ul Ekber" }
  • Burada id'si 6 olan kütüphaneyi ve kitabın ismini veriyoruz. Dönen cevap:
{ "id": 3, "name": "Kitab-ul Ekber", "library": 6 }
  • http://127.0.0.1:8000/apitr/books/3 adresine de PUT DELETE isteklerini yapabilirsiniz.
  • Örnek PUT request
{ "name": "Fıkh-ul Ekber, İmam-ı Azam Ebu Hanife", "library": 6 }
  • Dönen cevap:
{ "id": 3, "name": "Fıkh-ul Ekber, İmam-ı Azam Ebu Hanife", "library": 6 }

Yorumlar