{"id":38575,"date":"2026-02-03T11:01:15","date_gmt":"2026-02-03T08:01:15","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/"},"modified":"2026-02-03T11:01:15","modified_gmt":"2026-02-03T08:01:15","slug":"django-rest-framework-drf-serilestiricilerine-giris-bolum-1","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/","title":{"rendered":"Django Rest Framework (DRF) Serile\u015ftiricilerine Giri\u015f: B\u00f6l\u00fcm 1"},"content":{"rendered":"<h2>Django Rest Framework (DRF) Serile\u015ftiricilerine Giri\u015f: B\u00f6l\u00fcm 1<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz web uygulamalar\u0131nda, farkl\u0131 platformlar (mobil uygulamalar, tek sayfa uygulamalar\u0131, di\u011fer servisler) aras\u0131nda veri al\u0131\u015fveri\u015fi yapmak vazge\u00e7ilmez bir ihtiya\u00e7 haline gelmi\u015ftir. Bu al\u0131\u015fveri\u015fin temelini olu\u015fturan API&#8217;ler (Uygulama Programlama Aray\u00fczleri), verilerin belirli formatlarda (genellikle JSON veya XML) sunulmas\u0131n\u0131 ve al\u0131nmas\u0131n\u0131 sa\u011flar. Django Rest Framework (DRF), Django projeleri i\u00e7in g\u00fc\u00e7l\u00fc ve esnek bir RESTful API olu\u015fturma arac\u0131d\u0131r. Bu makalenin ilk b\u00f6l\u00fcm\u00fcnde, DRF&#8217;in kalbinde yer alan ve veri d\u00f6n\u00fc\u015f\u00fcm\u00fcn\u00fc sa\u011flayan serile\u015ftiricilerin (serializers) ne oldu\u011funu, neden gerekli oldu\u011funu ve temel kullan\u0131mlar\u0131n\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz. Serile\u015ftiricilerin g\u00fcc\u00fcn\u00fc ve esnekli\u011fini anlayarak, kendi API&#8217;lerinizi daha etkin bir \u015fekilde geli\u015ftirebileceksiniz.<\/p>\n<h3>Web API&#8217;leri ve Veri D\u00f6n\u00fc\u015f\u00fcm\u00fc Neden \u00d6nemli?<\/h3>\n<p>Modern yaz\u0131l\u0131m mimarilerinde, bir uygulaman\u0131n sadece tek bir aray\u00fczden ibaret olmas\u0131 nadirdir. Genellikle, web siteleri, mobil uygulamalar, masa\u00fcst\u00fc uygulamalar\u0131 ve hatta di\u011fer arka u\u00e7 servisleri gibi bir\u00e7ok farkl\u0131 istemcinin ayn\u0131 verilere eri\u015fmesi ve bu verilerle etkile\u015fimde bulunmas\u0131 gerekir. \u0130\u015fte bu noktada Web API&#8217;leri devreye girer.<\/p>\n<h4>API&#8217;lerin Rol\u00fc<\/h4>\n<p>API&#8217;ler, farkl\u0131 yaz\u0131l\u0131m sistemlerinin birbirleriyle g\u00fcvenli ve standart bir \u015fekilde ileti\u015fim kurmas\u0131n\u0131 sa\u011flayan k\u00f6pr\u00fclerdir. Bir API, bir sunucunun belirli bir iste\u011fe nas\u0131l yan\u0131t verece\u011fini tan\u0131mlar ve bu yan\u0131t\u0131 belirli bir formatta (\u00f6rne\u011fin JSON veya XML) sunar. Bu sayede, istemciler sunucunun i\u00e7 i\u015fleyi\u015fini bilmeden veri al\u0131p g\u00f6nderebilirler.<\/p>\n<h4>Veri Formatlar\u0131 (JSON, XML)<\/h4>\n<p>API&#8217;ler arac\u0131l\u0131\u011f\u0131yla iletilen verilerin, hem sunucu hem de istemci taraf\u0131ndan kolayca anla\u015f\u0131labilir ve i\u015flenebilir olmas\u0131 gerekir. Bu nedenle, veriler genellikle evrensel formatlarda temsil edilir:<\/p>\n<ul>\n<li><strong>JSON (JavaScript Object Notation):<\/strong> Hafif, okunmas\u0131 ve yaz\u0131lmas\u0131 kolay bir veri de\u011fi\u015fim format\u0131d\u0131r. Web API&#8217;lerinde en yayg\u0131n kullan\u0131lan formatt\u0131r.<\/li>\n<li><strong>XML (Extensible Markup Language):<\/strong> Daha eski ve daha detayl\u0131 bir format olup, hala baz\u0131 kurumsal sistemlerde kullan\u0131lmaktad\u0131r.<\/li>\n<\/ul>\n<p>DRF, varsay\u0131lan olarak JSON&#8217;\u0131 tercih ederken, iste\u011fe ba\u011fl\u0131 olarak di\u011fer formatlar\u0131 da destekler.<\/p>\n<h4>DRF&#8217;in Bu S\u00fcre\u00e7teki Yeri<\/h4>\n<p>Django Rest Framework, Django&#8217;nun ORM (Object-Relational Mapping) yap\u0131s\u0131 ile veritaban\u0131 aras\u0131ndaki Python nesnelerini, API istemcilerinin anlayabilece\u011fi JSON veya XML gibi formatlara d\u00f6n\u00fc\u015ft\u00fcrme ve tersi i\u015flemi yapma s\u00fcrecini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde basitle\u015ftirir. Bu d\u00f6n\u00fc\u015f\u00fcm\u00fcn anahtar bile\u015feni ise serile\u015ftiricilerdir.<\/p>\n<h3>Django Rest Framework&#8217;e H\u0131zl\u0131 Bir Bak\u0131\u015f<\/h3>\n<p>DRF, Django&#8217;nun \u00fczerine in\u015fa edilmi\u015f, g\u00fc\u00e7l\u00fc ve esnek bir ara\u00e7 setidir. RESTful API&#8217;ler olu\u015fturmay\u0131 h\u0131zland\u0131rmak ve kolayla\u015ft\u0131rmak i\u00e7in tasarlanm\u0131\u015ft\u0131r.<\/p>\n<h4>DRF Nedir?<\/h4>\n<p>DRF, Django geli\u015ftiricilerinin karma\u015f\u0131k API&#8217;leri h\u0131zl\u0131 bir \u015fekilde olu\u015fturmas\u0131n\u0131 sa\u011flayan bir dizi ara\u00e7, s\u0131n\u0131f ve metod sunar. Kimlik do\u011frulama, yetkilendirme, serile\u015ftirme, g\u00f6r\u00fcn\u00fcm (view) ve y\u00f6nlendirme (routing) gibi bir\u00e7ok temel API ihtiyac\u0131n\u0131 kar\u015f\u0131lar.<\/p>\n<h4>Neden DRF Kullanmal\u0131y\u0131z?<\/h4>\n<ul>\n<li><strong>H\u0131zl\u0131 Geli\u015ftirme:<\/strong> Haz\u0131r s\u0131n\u0131flar ve fonksiyonlar sayesinde API geli\u015ftirme s\u00fcresini k\u0131salt\u0131r.<\/li>\n<li><strong>Esneklik:<\/strong> \u0130htiya\u00e7lar\u0131n\u0131za g\u00f6re \u00f6zelle\u015ftirilebilir.<\/li>\n<li><strong>G\u00fc\u00e7l\u00fc Serile\u015ftirme:<\/strong> Django modellerini kolayca API \u00e7\u0131kt\u0131s\u0131na d\u00f6n\u00fc\u015ft\u00fcr\u00fcr.<\/li>\n<li><strong>Kimlik Do\u011frulama ve Yetkilendirme:<\/strong> Farkl\u0131 kimlik do\u011frulama (Token, Session, OAuth2) ve yetkilendirme (izinler) mekanizmalar\u0131 sunar.<\/li>\n<li><strong>Web Taray\u0131c\u0131s\u0131 Deste\u011fi:<\/strong> Geli\u015ftirme s\u0131ras\u0131nda API&#8217;leri test etmek i\u00e7in kullan\u0131\u015fl\u0131 bir web taray\u0131c\u0131s\u0131 aray\u00fcz\u00fc sa\u011flar.<\/li>\n<\/ul>\n<h4>Temel Bile\u015fenleri (ViewSets, Routers, Serializers)<\/h4>\n<p>DRF&#8217;in temel bile\u015fenleri \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Serile\u015ftiriciler (Serializers):<\/strong> Python nesnelerini JSON\/XML gibi formatlara d\u00f6n\u00fc\u015ft\u00fcr\u00fcr ve tersini yapar. Veri do\u011frulama g\u00f6revini de \u00fcstlenir.<\/li>\n<li><strong>G\u00f6r\u00fcn\u00fcmler (Views) ve ViewSets:<\/strong> API isteklerini i\u015fleyen ve yan\u0131tlar\u0131 olu\u015fturan mant\u0131\u011f\u0131 i\u00e7erir. ViewSets, CRUD (Olu\u015fturma, Okuma, G\u00fcncelleme, Silme) i\u015flemlerini tek bir s\u0131n\u0131f alt\u0131nda toplar.<\/li>\n<li><strong>Y\u00f6nlendiriciler (Routers):<\/strong> ViewSets&#8217;leri otomatik olarak URL&#8217;lere ba\u011flamay\u0131 sa\u011flar, b\u00f6ylece URL yap\u0131land\u0131rmas\u0131 basitle\u015fir.<\/li>\n<\/ul>\n<h3>Serile\u015ftirici Nedir ve Ne \u0130\u015fe Yarar?<\/h3>\n<p>Serile\u015ftiriciler, DRF&#8217;in en kritik ve temel bile\u015fenlerinden biridir. Veritaban\u0131 ile API istemcisi aras\u0131ndaki k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcrler.<\/p>\n<h4>Serile\u015ftirme ve Deserile\u015ftirme Kavramlar\u0131<\/h4>\n<ul>\n<li><strong>Serile\u015ftirme (Serialization):<\/strong> Django model \u00f6rnekleri (Python nesneleri) gibi karma\u015f\u0131k veri yap\u0131lar\u0131n\u0131, API \u00fczerinden kolayca iletilebilecek JSON veya XML gibi yerel Python veri t\u00fcrlerine (s\u00f6zl\u00fckler, listeler) d\u00f6n\u00fc\u015ft\u00fcrme i\u015flemidir. Bu yerel veri t\u00fcrleri daha sonra JSON\/XML gibi formatlara kolayca d\u00f6n\u00fc\u015ft\u00fcr\u00fclebilir.<\/li>\n<li><strong>Deserile\u015ftirme (Deserialization):<\/strong> Gelen JSON veya XML verilerini al\u0131p, bunlar\u0131 do\u011frulamak ve Django model \u00f6rnekleri gibi karma\u015f\u0131k Python nesnelerine geri d\u00f6n\u00fc\u015ft\u00fcrme i\u015flemidir. Bu i\u015flem, gelen verilerin veritaban\u0131na kaydedilmesi veya g\u00fcncellenmesi i\u00e7in kullan\u0131l\u0131r.<\/li>\n<\/ul>\n<h4>Model Verilerini API \u00c7\u0131kt\u0131s\u0131na D\u00f6n\u00fc\u015ft\u00fcrme<\/h4>\n<p>Bir Django modeliniz oldu\u011funu varsayal\u0131m. Bu modelin bir \u00f6rne\u011fini do\u011frudan bir API yan\u0131t\u0131nda d\u00f6nd\u00fcremezsiniz. Serile\u015ftirici, model \u00f6rne\u011finin hangi alanlar\u0131n\u0131n (fields) API \u00e7\u0131kt\u0131s\u0131nda yer alaca\u011f\u0131n\u0131, bu alanlar\u0131n nas\u0131l formatlanaca\u011f\u0131n\u0131 ve adland\u0131r\u0131laca\u011f\u0131n\u0131 belirler. \u00d6rne\u011fin, bir <code>Product<\/code> modelinin sadece <code>name<\/code>, <code>price<\/code> ve <code>stock<\/code> alanlar\u0131n\u0131 g\u00f6stermek isteyebilirsiniz.<\/p>\n<h4>Gelen Verileri Do\u011frulama ve Kaydetme<\/h4>\n<p>API&#8217;ye gelen veriler, genellikle bir form arac\u0131l\u0131\u011f\u0131yla g\u00f6nderilen verilere benzer. Bu verilerin ge\u00e7erli olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek (\u00f6rne\u011fin, bir e-posta adresinin do\u011fru formatta olup olmad\u0131\u011f\u0131n\u0131, bir say\u0131n\u0131n pozitif olup olmad\u0131\u011f\u0131n\u0131) ve daha sonra veritaban\u0131na kaydetmek veya mevcut bir kayd\u0131 g\u00fcncellemek serile\u015ftiricinin bir di\u011fer \u00f6nemli g\u00f6revidir. Serile\u015ftiriciler, bu do\u011frulama (validation) s\u00fcrecini otomatikle\u015ftirir ve hatalar\u0131 kullan\u0131c\u0131ya anla\u015f\u0131l\u0131r bir \u015fekilde sunar.<\/p>\n<h3>Temel Serile\u015ftirici S\u0131n\u0131f\u0131: <code>Serializer<\/code><\/h3>\n<p>DRF&#8217;deki en temel serile\u015ftirici s\u0131n\u0131f\u0131 <code>rest_framework.serializers.Serializer<\/code>&#8216;d\u0131r. Bu s\u0131n\u0131f, Django&#8217;nun <code>forms.Form<\/code> s\u0131n\u0131f\u0131na olduk\u00e7a benzer bir yap\u0131ya sahiptir.<\/p>\n<h4><code>django.forms.Form<\/code> ile Benzerlikleri<\/h4>\n<p>T\u0131pk\u0131 Django formlar\u0131nda oldu\u011fu gibi, <code>Serializer<\/code> s\u0131n\u0131f\u0131 da belirli alanlar\u0131 (<code>fields<\/code>) tan\u0131mlayarak \u00e7al\u0131\u015f\u0131r. Bu alanlar, serile\u015ftirilecek veya deserile\u015ftirilecek verilerin yap\u0131s\u0131n\u0131 ve t\u00fcr\u00fcn\u00fc belirler. Her alan, kendi do\u011frulama kurallar\u0131na sahip olabilir.<\/p>\n<h4>Alan Tan\u0131mlama (<code>fields<\/code>)<\/h4>\n<p><code>Serializer<\/code> s\u0131n\u0131f\u0131nda, her bir alan bir s\u0131n\u0131f niteli\u011fi olarak tan\u0131mlan\u0131r. DRF, farkl\u0131 veri t\u00fcrleri i\u00e7in \u00e7e\u015fitli alan s\u0131n\u0131flar\u0131 sunar:<\/p>\n<ul>\n<li><code>serializers.CharField<\/code><\/li>\n<li><code>serializers.IntegerField<\/code><\/li>\n<li><code>serializers.BooleanField<\/code><\/li>\n<li><code>serializers.DateTimeField<\/code><\/li>\n<li><code>serializers.EmailField<\/code><\/li>\n<li><code>serializers.URLField<\/code><\/li>\n<li>ve daha fazlas\u0131&#8230;<\/li>\n<\/ul>\n<p><strong>\u00d6rnek: Basit bir Serile\u015ftirici<\/strong><\/p>\n<pre><code class=\"language-python\">from rest_framework import serializers\n\nclass CommentSerializer(serializers.Serializer):\n    email = serializers.EmailField()\n    content = serializers.CharField(max_length=200)\n    created = serializers.DateTimeField()\n\n# Kullan\u0131m \u00f6rne\u011fi:\n# comment = {'email': 'foo@example.com', 'content': 'hello world', 'created': '2023-10-27T10:00:00Z'}\n# serializer = CommentSerializer(data=comment)\n# if serializer.is_valid():\n#     print(serializer.validated_data)\n# {'email': 'foo@example.com', 'content': 'hello world', 'created': datetime.datetime(2023, 10, 27, 10, 0, tzinfo=<UTC>)}\n<\/pre>\n<p><\/code><\/p>\n<h4>Veri Do\u011frulama (Validation)<\/h4>\n<p>Serile\u015ftiriciler, gelen verileri otomatik olarak do\u011frular. Her alan\u0131n kendi do\u011frulama kurallar\u0131 vard\u0131r (<code>max_length<\/code>, <code>min_value<\/code> vb.). Ek olarak, \u00f6zel do\u011frulama mant\u0131\u011f\u0131 eklemek i\u00e7in serile\u015ftirici s\u0131n\u0131f\u0131nda <code>validate_<field_name><\/code> veya <code>validate<\/code> metotlar\u0131 tan\u0131mlanabilir.<\/p>\n<h3>Model Serile\u015ftiriciler: <code>ModelSerializer<\/code><\/h3>\n<p>DRF'in en \u00e7ok kullan\u0131lan ve en g\u00fc\u00e7l\u00fc serile\u015ftirici s\u0131n\u0131f\u0131 <code>rest_framework.serializers.ModelSerializer<\/code>'d\u0131r. Bu s\u0131n\u0131f, Django'nun <code>forms.ModelForm<\/code> s\u0131n\u0131f\u0131na benzer \u015fekilde \u00e7al\u0131\u015f\u0131r ve bir Django modelinden otomatik olarak alanlar\u0131 ve do\u011frulama kurallar\u0131n\u0131 t\u00fcretir.<\/p>\n<h4><code>django.forms.ModelForm<\/code> ile Benzerlikleri<\/h4>\n<p>T\u0131pk\u0131 <code>ModelForm<\/code> gibi, <code>ModelSerializer<\/code> da bir Django modeliyle ili\u015fkilendirilir. Bu sayede, modeldeki alanlar\u0131 otomatik olarak serile\u015ftiriciye aktar\u0131r ve modelin do\u011frulama kurallar\u0131n\u0131 (<code>max_length<\/code>, <code>unique<\/code>, <code>choices<\/code> vb.) miras al\u0131r. Bu, geli\u015ftirme s\u00fcrecini \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r.<\/p>\n<h4>Otomatik Alan Olu\u015fturma<\/h4>\n<p><code>ModelSerializer<\/code>, belirtilen modeldeki t\u00fcm alanlar\u0131 veya belirli alanlar\u0131 otomatik olarak serile\u015ftiriciye dahil edebilir. Bu, her alan\u0131 tek tek tan\u0131mlama ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r.<\/p>\n<h4><code>fields<\/code> ve <code>exclude<\/code> Se\u00e7enekleri<\/h4>\n<p><code>ModelSerializer<\/code> i\u00e7inde, <code>Meta<\/code> s\u0131n\u0131f\u0131 arac\u0131l\u0131\u011f\u0131yla hangi alanlar\u0131n dahil edilece\u011fini veya hari\u00e7 tutulaca\u011f\u0131n\u0131 belirtebilirsiniz:<\/p>\n<ul>\n<li><code>fields = '__all__'<\/code>: Modeldeki t\u00fcm alanlar\u0131 dahil eder.<\/li>\n<li><code>fields = ['id', 'name', 'price']<\/code>: Sadece belirtilen alanlar\u0131 dahil eder.<\/li>\n<li><code>exclude = ['created_at', 'updated_at']<\/code>: Belirtilen alanlar d\u0131\u015f\u0131ndaki t\u00fcm alanlar\u0131 dahil eder.<\/li>\n<\/ul>\n<h4><code>read_only_fields<\/code> ve <code>extra_kwargs<\/code><\/h4>\n<ul>\n<li><code>read_only_fields<\/code>: Bu listedeki alanlar, API \u00e7\u0131kt\u0131s\u0131nda g\u00f6sterilir ancak gelen verilerde kabul edilmez ve g\u00fcncellenemez. Genellikle <code>id<\/code>, <code>created_at<\/code> gibi alanlar i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><code>extra_kwargs<\/code>: Belirli alanlar i\u00e7in ek se\u00e7enekler (<code>write_only<\/code>, <code>required<\/code>, <code>validators<\/code> vb.) tan\u0131mlaman\u0131z\u0131 sa\u011flar.<\/li>\n<\/ul>\n<p><strong>\u00d6rnek: <code>ModelSerializer<\/code> Kullan\u0131m\u0131<\/strong><\/p>\n<pre><code class=\"language-python\"># models.py\nfrom django.db import models\n\nclass Product(models.Model):\n    name = models.CharField(max_length=100)\n    description = models.TextField(blank=True)\n    price = models.DecimalField(max_digits=10, decimal_places=2)\n    stock = models.IntegerField(default=0)\n    is_active = models.BooleanField(default=True)\n    created_at = models.DateTimeField(auto_now_add=True)\n\n    def __str__(self):\n        return self.name\n\n# serializers.py\nfrom rest_framework import serializers\nfrom .models import Product\n\nclass ProductSerializer(serializers.ModelSerializer):\n    class Meta:\n        model = Product\n        fields = ['id', 'name', 'price', 'stock', 'is_active']\n        read_only_fields = ['id'] # id alan\u0131 sadece okunabilir olacak\n        extra_kwargs = {'price': {'min_value': 0}} # price alan\u0131 i\u00e7in ek do\u011frulama\n<\/pre>\n<p><\/code><\/p>\n<h3>Basit Bir Serile\u015ftirici \u00d6rne\u011fi: <code>ModelSerializer<\/code> Kullan\u0131m\u0131<\/h3>\n<p>Yukar\u0131daki <code>Product<\/code> modeli ve <code>ProductSerializer<\/code> ile serile\u015ftirme ve deserile\u015ftirme i\u015flemlerini ad\u0131m ad\u0131m inceleyelim.<\/p>\n<h4>\u00d6rnek Django Modeli Olu\u015fturma<\/h4>\n<p>Yukar\u0131da tan\u0131mlad\u0131\u011f\u0131m\u0131z <code>Product<\/code> modelini kulland\u0131\u011f\u0131m\u0131z\u0131 varsayal\u0131m. Bu model, bir \u00fcr\u00fcn\u00fcn ad\u0131n\u0131, a\u00e7\u0131klamas\u0131n\u0131, fiyat\u0131n\u0131, sto\u011funu ve aktif olup olmad\u0131\u011f\u0131n\u0131 tutar.<\/p>\n<h4>Basit <code>ModelSerializer<\/code> Tan\u0131mlama<\/h4>\n<p><code>ProductSerializer<\/code> s\u0131n\u0131f\u0131n\u0131 yukar\u0131daki gibi tan\u0131mlad\u0131k. Bu serile\u015ftirici, <code>Product<\/code> modelindeki <code>id<\/code>, <code>name<\/code>, <code>price<\/code>, <code>stock<\/code> ve <code>is_active<\/code> alanlar\u0131n\u0131 kullanacak.<\/p>\n<h4>Serile\u015ftirme ve Deserile\u015ftirme \u0130\u015flemleri (Kod \u00d6rnekleri)<\/h4>\n<p><strong>Serile\u015ftirme (Python Nesnesinden JSON'a):<\/strong><\/p>\n<pre><code class=\"language-python\"># Django shell veya bir view i\u00e7inde\nfrom myapp.models import Product\nfrom myapp.serializers import ProductSerializer\n\n# Veritaban\u0131ndan bir \u00fcr\u00fcn alal\u0131m\nproduct_instance = Product.objects.create(name=\"Laptop\", price=1200.00, stock=10)\n\n# Tek bir nesneyi serile\u015ftirme\nserializer = ProductSerializer(product_instance)\nprint(serializer.data)\n# \u00c7\u0131kt\u0131: {'id': 1, 'name': 'Laptop', 'price': '1200.00', 'stock': 10, 'is_active': True}\n\n# Birden fazla nesneyi (queryset) serile\u015ftirme\nproducts = Product.objects.all()\nserializer = ProductSerializer(products, many=True)\nprint(serializer.data)\n# \u00c7\u0131kt\u0131: [{'id': 1, 'name': 'Laptop', 'price': '1200.00', 'stock': 10, 'is_active': True}, ...]\n<\/pre>\n<p><\/code><\/p>\n<p><strong>Deserile\u015ftirme (JSON'dan Python Nesnesine ve Kaydetme):<\/strong><\/p>\n<pre><code class=\"language-python\">from myapp.serializers import ProductSerializer\n\n# Yeni bir \u00fcr\u00fcn olu\u015fturmak i\u00e7in gelen veri\nnew_product_data = {'name': 'Mouse', 'price': 25.99, 'stock': 50, 'is_active': True}\nserializer = ProductSerializer(data=new_product_data)\n\nif serializer.is_valid():\n    product = serializer.save() # Yeni bir Product nesnesi olu\u015fturur ve veritaban\u0131na kaydeder\n    print(f\"Yeni \u00fcr\u00fcn olu\u015fturuldu: {product.name} (ID: {product.id})\")\n    # \u00c7\u0131kt\u0131: Yeni \u00fcr\u00fcn olu\u015fturuldu: Mouse (ID: 2)\nelse:\n    print(serializer.errors) # Do\u011frulama hatalar\u0131n\u0131 g\u00f6sterir\n\n# Mevcut bir \u00fcr\u00fcn\u00fc g\u00fcncellemek i\u00e7in\nexisting_product = Product.objects.get(id=1) # ID'si 1 olan \u00fcr\u00fcn\u00fc alal\u0131m\nupdate_data = {'name': 'Gaming Laptop', 'price': 1500.00} # Sadece name ve price g\u00fcncelleyelim\n\nserializer = ProductSerializer(existing_product, data=update_data, partial=True) # partial=True k\u0131smi g\u00fcncellemeye izin verir\nif serializer.is_valid():\n    product = serializer.save() # Mevcut \u00fcr\u00fcn\u00fc g\u00fcnceller\n    print(f\"\u00dcr\u00fcn g\u00fcncellendi: {product.name} (Yeni Fiyat: {product.price})\")\n    # \u00c7\u0131kt\u0131: \u00dcr\u00fcn g\u00fcncellendi: Gaming Laptop (Yeni Fiyat: 1500.00)\nelse:\n    print(serializer.errors)\n<\/pre>\n<p><\/code><\/p>\n<h3>Serile\u015ftiricilerde Veri Do\u011frulama (Validation)<\/h3>\n<p>Veri do\u011frulama, serile\u015ftiricilerin en kritik i\u015flevlerinden biridir. Gelen verilerin API'nizin bekledi\u011fi format ve kurallara uygun oldu\u011fundan emin olmak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h4>Alan Bazl\u0131 Do\u011frulama<\/h4>\n<p>Her serile\u015ftirici alan\u0131, kendi i\u00e7inde temel do\u011frulama kurallar\u0131na sahiptir (<code>max_length<\/code>, <code>min_value<\/code>, <code>regex<\/code> vb.). Ayr\u0131ca, \u00f6zel alan bazl\u0131 do\u011frulama metotlar\u0131 da tan\u0131mlayabilirsiniz:<\/p>\n<pre><code class=\"language-python\">from rest_framework import serializers\n\nclass ProductSerializer(serializers.ModelSerializer):\n    class Meta:\n        model = Product\n        fields = '__all__'\n\n    def validate_stock(self, value):\n        if value < 0:\n            raise serializers.ValidationError(\"Stok miktar\u0131 negatif olamaz.\")\n        return value\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte, <code>validate_stock<\/code> metodu, <code>stock<\/code> alan\u0131 i\u00e7in \u00f6zel bir do\u011frulama kural\u0131 ekler. Metot ad\u0131 <code>validate_<alan_ad\u0131><\/code> \u015feklinde olmal\u0131d\u0131r.<\/p>\n<h4>Nesne Bazl\u0131 Do\u011frulama (<code>validate<\/code> metodu)<\/h4>\n<p>Bazen, bir alan\u0131n do\u011frulamas\u0131 di\u011fer alanlar\u0131n de\u011ferlerine ba\u011fl\u0131 olabilir. Bu t\u00fcr senaryolar i\u00e7in, serile\u015ftirici s\u0131n\u0131f\u0131nda <code>validate<\/code> metodunu kullanabilirsiniz. Bu metot, t\u00fcm alanlar\u0131n ilk do\u011frulamas\u0131ndan sonra \u00e7al\u0131\u015f\u0131r ve serile\u015ftiricinin t\u00fcm <code>validated_data<\/code> s\u00f6zl\u00fc\u011f\u00fcn\u00fc al\u0131r.<\/p>\n<pre><code class=\"language-python\">from rest_framework import serializers\n\nclass ProductSerializer(serializers.ModelSerializer):\n    class Meta:\n        model = Product\n        fields = '__all__'\n\n    def validate(self, data):\n        # E\u011fer \u00fcr\u00fcn aktif de\u011filse, sto\u011fu 0 olmal\u0131\n        if not data.get('is_active') and data.get('stock', 0) > 0:\n            raise serializers.ValidationError(\"Pasif \u00fcr\u00fcnlerin sto\u011fu 0 olmal\u0131d\u0131r.\")\n        return data\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, e\u011fer \u00fcr\u00fcn aktif de\u011filse ancak sto\u011fu s\u0131f\u0131rdan b\u00fcy\u00fckse bir do\u011frulama hatas\u0131 f\u0131rlat\u0131l\u0131r. Bu, iki veya daha fazla alan aras\u0131ndaki ili\u015fkileri do\u011frulamak i\u00e7in idealdir.<\/p>\n<h4>Hata Y\u00f6netimi<\/h4>\n<p>Serile\u015ftirici <code>is_valid()<\/code> metodunu \u00e7a\u011f\u0131rd\u0131\u011f\u0131n\u0131zda ve do\u011frulama ba\u015far\u0131s\u0131z oldu\u011funda, hatalar <code>serializer.errors<\/code> \u00f6zelli\u011finde bir s\u00f6zl\u00fck olarak saklan\u0131r. Bu s\u00f6zl\u00fck, her alan i\u00e7in hata mesajlar\u0131n\u0131 veya genel hatalar\u0131 i\u00e7erir.<\/p>\n<pre><code class=\"language-python\"># \u00d6rnek hata \u00e7\u0131kt\u0131s\u0131\n# serializer.errors\n# {\n#     'stock': ['Stok miktar\u0131 negatif olamaz.'],\n#     'non_field_errors': ['Pasif \u00fcr\u00fcnlerin sto\u011fu 0 olmal\u0131d\u0131r.']\n# }\n<\/pre>\n<p><\/code><\/p>\n<p>Bu hata mesajlar\u0131, API istemcilerine geri d\u00f6nd\u00fcr\u00fclerek kullan\u0131c\u0131lar\u0131n hatal\u0131 giri\u015flerini d\u00fczeltmelerine yard\u0131mc\u0131 olur.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu makalenin ilk b\u00f6l\u00fcm\u00fcnde, Django Rest Framework serile\u015ftiricilerinin temel kavramlar\u0131n\u0131 ve \u00f6nemini ele ald\u0131k. Web API'lerinin veri d\u00f6n\u00fc\u015f\u00fcm\u00fcndeki rol\u00fcn\u00fc, DRF'in genel yap\u0131s\u0131n\u0131 ve serile\u015ftiricilerin serile\u015ftirme, deserile\u015ftirme ve do\u011frulama s\u00fcre\u00e7lerindeki merkezi konumunu inceledik. \u00d6zellikle, temel <code>Serializer<\/code> s\u0131n\u0131f\u0131 ile <code>ModelSerializer<\/code> s\u0131n\u0131f\u0131n\u0131n farklar\u0131n\u0131, kullan\u0131m alanlar\u0131n\u0131 ve pratik kod \u00f6rnekleriyle nas\u0131l \u00e7al\u0131\u015ft\u0131klar\u0131n\u0131 g\u00f6rd\u00fck. Alan bazl\u0131 ve nesne bazl\u0131 do\u011frulama y\u00f6ntemlerini anlayarak, API'lerinizde veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc nas\u0131l sa\u011flayabilece\u011finizi \u00f6\u011frendiniz.<\/p>\n<p>Serile\u015ftiriciler, DRF'in kalbidir ve onlar\u0131 iyi anlamak, g\u00fc\u00e7l\u00fc ve g\u00fcvenilir API'ler geli\u015ftirmenin anahtar\u0131d\u0131r. Bir sonraki b\u00f6l\u00fcmde, daha karma\u015f\u0131k serile\u015ftirici konular\u0131na, \u00f6rne\u011fin i\u00e7 i\u00e7e serile\u015ftiriciler (nested serializers), \u00f6zel alanlar (custom fields) ve ili\u015fkisel verilerin y\u00f6netimine odaklanaca\u011f\u0131z. Bu bilgilerle, DRF'in sundu\u011fu t\u00fcm esnekli\u011fi ve g\u00fcc\u00fc kullanarak daha geli\u015fmi\u015f API'ler in\u015fa edebileceksiniz.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4>DRF serile\u015ftiricileri neden gereklidir?<\/h4>\n<p>DRF serile\u015ftiricileri, Django modelleri gibi karma\u015f\u0131k Python nesnelerini, API istemcilerinin anlayabilece\u011fi JSON veya XML gibi formatlara d\u00f6n\u00fc\u015ft\u00fcrmek (serile\u015ftirme) ve gelen JSON\/XML verilerini Python nesnelerine geri d\u00f6n\u00fc\u015ft\u00fcrerek do\u011frulamak ve kaydetmek (deserile\u015ftirme) i\u00e7in gereklidir. Bu, veri al\u0131\u015fveri\u015fini standartla\u015ft\u0131r\u0131r ve kolayla\u015ft\u0131r\u0131r.<\/p>\n<h4><code>Serializer<\/code> ile <code>ModelSerializer<\/code> aras\u0131ndaki fark nedir?<\/h4>\n<p><code>Serializer<\/code>, Django'nun <code>forms.Form<\/code> s\u0131n\u0131f\u0131na benzer \u015fekilde, manuel olarak alanlar\u0131 tan\u0131mlaman\u0131z gereken genel bir serile\u015ftiricidir. Herhangi bir Django modeliyle do\u011frudan ili\u015fkili de\u011fildir. <code>ModelSerializer<\/code> ise, Django'nun <code>forms.ModelForm<\/code> s\u0131n\u0131f\u0131na benzer ve belirli bir Django modeliyle ili\u015fkilendirilir. Modelden alanlar\u0131 ve do\u011frulama kurallar\u0131n\u0131 otomatik olarak t\u00fcreterek h\u0131zl\u0131 API geli\u015ftirme sa\u011flar.<\/p>\n<h4>Serile\u015ftiricilerde veri do\u011frulama nas\u0131l yap\u0131l\u0131r?<\/h4>\n<p>Veri do\u011frulama, alan baz\u0131nda (\u00f6rne\u011fin <code>max_length<\/code>, <code>min_value<\/code> gibi alan parametreleri veya <code>validate_<field_name><\/code> metotlar\u0131 ile) veya nesne baz\u0131nda (<code>validate<\/code> metodu ile) yap\u0131labilir. <code>is_valid()<\/code> metodu \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda bu do\u011frulamalar \u00e7al\u0131\u015f\u0131r ve hatalar <code>serializer.errors<\/code> \u00f6zelli\u011finde saklan\u0131r.<\/p>\n<h4>Bir serile\u015ftiriciyi nas\u0131l test edebilirim?<\/h4>\n<p>Bir serile\u015ftiriciyi test etmek i\u00e7in, Python shell'de veya unit testlerinizde manuel olarak \u00f6rnek verilerle (s\u00f6zl\u00fckler) serile\u015ftiriciyi olu\u015fturabilir, <code>is_valid()<\/code> metodunu \u00e7a\u011f\u0131rabilir ve <code>serializer.data<\/code> veya <code>serializer.errors<\/code> \u00f6zelliklerini kontrol edebilirsiniz. Ayr\u0131ca, bir <code>ModelSerializer<\/code> i\u00e7in model \u00f6rnekleri olu\u015fturup serile\u015ftirme ve deserile\u015ftirme i\u015flemlerini test edebilirsiniz.<\/p>\n","protected":false},"excerpt":{"rendered":"G\u00fcn\u00fcm\u00fcz web uygulamalar\u0131nda, farkl\u0131 platformlar (mobil uygulamalar, tek sayfa uygulamalar\u0131, di\u011fer servisler) aras\u0131nda veri al\u0131\u015fveri\u015fi yapmak vazge&#8230;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-38575","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Django Rest Framework (DRF) Serile\u015ftiricilerine Giri\u015f: B\u00f6l\u00fcm 1 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Django Rest Framework (DRF) Serile\u015ftiricilerine Giri\u015f: B\u00f6l\u00fcm 1\" \/>\n<meta property=\"og:description\" content=\"G\u00fcn\u00fcm\u00fcz web uygulamalar\u0131nda, farkl\u0131 platformlar (mobil uygulamalar, tek sayfa uygulamalar\u0131, di\u011fer servisler) aras\u0131nda veri al\u0131\u015fveri\u015fi yapmak vazge...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-03T08:01:15+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Django Rest Framework (DRF) Serile\u015ftiricilerine Giri\u015f: B\u00f6l\u00fcm 1\",\"datePublished\":\"2026-02-03T08:01:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/\"},\"wordCount\":2176,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/\",\"name\":\"Django Rest Framework (DRF) Serile\u015ftiricilerine Giri\u015f: B\u00f6l\u00fcm 1 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-03T08:01:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Django Rest Framework (DRF) Serile\u015ftiricilerine Giri\u015f: B\u00f6l\u00fcm 1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Django Rest Framework (DRF) Serile\u015ftiricilerine Giri\u015f: B\u00f6l\u00fcm 1 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/","og_locale":"tr_TR","og_type":"article","og_title":"Django Rest Framework (DRF) Serile\u015ftiricilerine Giri\u015f: B\u00f6l\u00fcm 1","og_description":"G\u00fcn\u00fcm\u00fcz web uygulamalar\u0131nda, farkl\u0131 platformlar (mobil uygulamalar, tek sayfa uygulamalar\u0131, di\u011fer servisler) aras\u0131nda veri al\u0131\u015fveri\u015fi yapmak vazge...","og_url":"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-03T08:01:15+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"14 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Django Rest Framework (DRF) Serile\u015ftiricilerine Giri\u015f: B\u00f6l\u00fcm 1","datePublished":"2026-02-03T08:01:15+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/"},"wordCount":2176,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/","url":"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/","name":"Django Rest Framework (DRF) Serile\u015ftiricilerine Giri\u015f: B\u00f6l\u00fcm 1 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-03T08:01:15+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/django-rest-framework-drf-serilestiricilerine-giris-bolum-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Django Rest Framework (DRF) Serile\u015ftiricilerine Giri\u015f: B\u00f6l\u00fcm 1"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38575","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=38575"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38575\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}