
Django REST Framework Hızlı Başlangıç
Django Rest Framework ile basit bir Kullanıcı Yönetimi için api sistemi kurucaz. Olayın akışını ve gidişatını görmek adına hızlı bi başlangıç olacak. İlerleyen makalelerde ince detaylarınada gireceğiz.
Bir önceki makalede SOUP ve REST’in ne anlama geldiklerini gördük ve Kurulumu Yaptık
Dikkat : Boş veya dolu, virtualenv üzerinde kurulu bir django projeniz olduğunu var sayarak ve ilk makaleyi okuyup gerekli kurulumları yaptığınızı var sayarak devam edeceğim.
1-) Serializers Oluşturmak
Serializers.py’ı benzeterek anlatmak gerekirse Django’daki forms.py ile aynı mantıkla çalışmaktadır. Yani, API sisteminde hangi veriler olacak, seçilen verilerinin hangi sütünları(fields) olacak belirlememiz için ana belirleyici dosyadır.
- Yapacağımız örnek, kullanıcı yetkileri ve kayıtlı kullanıcı vb. görmek olduğu için django’un kendi user modellerini kullanacağız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# Django user ve group modelleri from django.contrib.auth.models import User, Group # serializers from rest_framework import serializers # UserSerializer adında bir model oluşturduk. class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User # db adı fields = ('url', 'username', 'email', 'groups') #db sütünları # GroupSerializer adında bir model oluşturduk. class GroupSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Group # db adı fields = ('url', 'name') #db sütünları |
HyperlinkedModelSerializer garip gelen yapı, api görünümü ile alakalıdır, bunu daha detaylı inceleceğiz şimdilik böyle bilmenizde sakınca yoktur.
Yapıyı genel olarak incelediğinizde , django’nun form.py sistemine aşırı benzemektedir.
Bilmediğiniz kavramları benzeterek gitmek herzaman, kolay öğrenmeyi sağlayacaktır.
2-) Views Oluşturmak
Django’da yazdığımız, görünüm fonksiyonlarından pek farkı aslında yoktur.
User ve Group modelleri için, views.py üzerinden görünüm oluşturup urls.py tarafından çağıracağız, kısaca mantık bu şekildedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Django user ve group modelleri from django.contrib.auth.models import User, Group # rest_framework'in viewsets'i from rest_framework import viewsets # serializers.py'in bulunduğu klasör adından hepisini import ettik. from untitled11.serializers import * class UserViewSet(viewsets.ModelViewSet): # en son kayıt olan kullanıcan itibaren sıraladık queryset = User.objects.all().order_by('-date_joined') # Form mantığı gibi düşünün, çağıralın modelin formu serializer_class = UserSerializer class GroupViewSet(viewsets.ModelViewSet): # Bütün grup modelini çağırdık queryset = Group.objects.all() # Group modelin formu serializer_class = GroupSerializer |
Basit bi şekilde, şöyle özetleyebiliriz.
- queryset : Veritabanı işlemleri
- serializer_class : Serializer modelin adı (JSON ve Form görünümü oluşturacaktır.)
3-) URL Oluşturmak
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
from django.conf.urls import url, include # routers çağırdık, url işlemlerini yürütücek. from rest_framework import routers # wp benim uygulamamım adıdır. # views içindeki iki adet fonksiyonu çağırıdık. from wp.views import UserViewSet,GroupViewSet router = routers.DefaultRouter() # /user/ ve /groups/ adlı iki url oluşturduk. # Bu urller çalışınca, belirtilmiş fonksiyonlar çalışacak. router.register(r'users', UserViewSet) router.register(r'groups', GroupViewSet) urlpatterns = [ # API Ana sayfası Sayfası url(r'^', include(router.urls)), url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) ] |
router tarafından gerekli ayarlamaları yaptıktan sonra, işlem bitmiş oluyor.
- router.register’den hangi url’de hangi fonksiyon çalışacak onu belirliyoruz.
3-) Settings Oluşturmak
1 2 3 4 5 6 7 8 9 10 11 12 |
# Paketi ekleyelim. INSTALLED_APPS = ( ... 'rest_framework', ) REST_FRAMEWORK = { #Sadece yöneticiler girebilir. 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',), # Her sayfada 10 veri bulunabilir. 'PAGE_SIZE': 10 } |
Gerekli paketleri ekledikten sonra, API yönetimi sadece admin tarafından yönetebilir ve görüntülenebilir olduğunu belirledik. Ayrıca her sayfada 10 adet veri bulanabilir.
Kurulumu tamamladık! şimdi, siteyi test edelim.
Siteyi tek tek inceliyelim.
Kullanıcı girişi olmadığı için, site bize 403 döndürecektir. Diğer makalede 403 hakkında bilgi verdik, Yetkimizin olmadığı bi yerde olduğumuzu belirtiyordu.
O halde admin bilgilerimizde giriş yapalım!
Kullanıcı girişi yaptık, Http 200 döndü yani siteden artık bilgi alabiliriz. Ayrıca ikinci kırmızı kutudan, “user” ve “groups” url vererek gerekli bilgileri alabilceğimizi gösteriyor.
http://127.0.0.1:8000/users/ girdiğimizde, 1 adet kayıtlı kullanıcı ve onun hakkında Json şeklinde bilgi vermektedir.
Hemen altında Raw data olan bölümünde sisteme JSON tipinde veri ekleyebilceğimizi göstermektedir.
Yukarıdaki resmin devamı olarak, HTML form üzerinden veri kayıt edebilceğimiz gösterilmektedir.
Bir diğer bahsedeceğim özellik ise, örneğin user/?format=json olarak istekte bulunduğumuzda, bütün userleri bize json olarak çıktı atacaktır.
Umarım faydalı olmuştur.
Yorumlar ( 2 )
Yazdiklarinizi django projeme uyguladim ancak url kismini tam cozemedigim icin sizin yazdiginizi aynen yapistirdim. Yani orada herhangi bir duzenleme yapmak gerekiyor mu bilmiyorum ve hangi urlye girerek Api Root sayfasina geldiginizi de anlamadim. Ama ben /users/ linkine girdigimde 500 hata kodunu aliyorum, onun ana dizinine ciktigimdaysa daha once belirledigim template verim dönüyor ve html sayfam geliyor karşıma. Diger tum sayfalarim da aynı sekilde aciliyor normal bir sekilde. Bu Api Root sayfasina nasil girebilirim ve bu hata kodu neden kaynaklaniyor olabilir?
Ayrica browserda gorunen hata:
/uniler/ dizini url sayfalarimda tanimli ve onda bir sikinti olmamasi lazim.
Hatami buldum. Buradan kopyaladigimda serializors.py dosyasinda field satiri class metada degil de class userser… classinin icinde kalmis. Grupta da ayni sekilde… Anlatiminiz aslinda cok iyi, tesekkurler bu döküman için ve umarım sonraki derslerde de eksik kısımlar tamamlanır. İyi çalışmalar…