{"id":32549,"date":"2025-10-23T05:41:08","date_gmt":"2025-10-23T02:41:08","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=32549"},"modified":"2025-10-23T05:41:08","modified_gmt":"2025-10-23T02:41:08","slug":"django-ile-nesne-depolama-kurulumu","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/","title":{"rendered":"Django ile Nesne Depolama Kurulumu"},"content":{"rendered":"<p><body><\/p>\n<h2>Django ile Nesne Depolama Kurulumu<\/h2>\n<h3>Giri\u015f<\/h3>\n<p>Modern web uygulamalar\u0131, kullan\u0131c\u0131 taraf\u0131ndan y\u00fcklenen medya dosyalar\u0131, statik i\u00e7erikler ve di\u011fer b\u00fcy\u00fck veri nesneleri gibi \u00e7e\u015fitli dosyalar\u0131 depolama ihtiyac\u0131 duyar. Geleneksel olarak, bu dosyalar uygulaman\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 sunucunun yerel dosya sisteminde saklan\u0131r. Ancak, bu yakla\u015f\u0131m \u00f6l\u00e7eklenebilirlik, g\u00fcvenilirlik, maliyet etkinli\u011fi ve performans gibi konularda \u00f6nemli k\u0131s\u0131tlamalar getirir. \u0130\u015fte bu noktada nesne depolama (Object Storage) devreye girer. Nesne depolama, verileri &#8220;nesneler&#8221; olarak depolayan, bu nesnelere benzersiz bir kimlik atayan ve meta verilerle zenginle\u015ftiren, \u00f6l\u00e7eklenebilir ve dayan\u0131kl\u0131 bir depolama mimarisidir.<\/p>\n<p>Django, g\u00fc\u00e7l\u00fc bir web \u00e7at\u0131s\u0131 olmakla birlikte, dosya depolama mekanizmas\u0131 varsay\u0131lan olarak yerel dosya sistemine odaklanm\u0131\u015ft\u0131r. Ancak <code>django-storages<\/code> gibi \u00fc\u00e7\u00fcnc\u00fc taraf k\u00fct\u00fcphaneler sayesinde, Django uygulamalar\u0131n\u0131 pop\u00fcler nesne depolama hizmetleriyle (AWS S3, Google Cloud Storage, Azure Blob Storage, MinIO vb.) entegre etmek olduk\u00e7a kolayd\u0131r. Bu makale, Django uygulaman\u0131z\u0131 \u00e7e\u015fitli nesne depolama sa\u011flay\u0131c\u0131lar\u0131yla nas\u0131l kuraca\u011f\u0131n\u0131z\u0131, yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ve y\u00f6netece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r. Amac\u0131m\u0131z, uygulaman\u0131z\u0131n dosya depolama altyap\u0131s\u0131n\u0131 \u00f6l\u00e7eklenebilir, g\u00fcvenli ve maliyet etkin bir yap\u0131ya kavu\u015fturmakt\u0131r.<\/p>\n<p>Nesne depolaman\u0131n Django ile kullan\u0131lmas\u0131n\u0131n temel faydalar\u0131 \u015funlard\u0131r:<br \/>\n*   <strong>\u00d6l\u00e7eklenebilirlik:<\/strong> \u0130htiya\u00e7 duydu\u011funuz kadar veri depolayabilir ve depolama kapasitesini an\u0131nda art\u0131rabilirsiniz. Sunucu kaynaklar\u0131ndan ba\u011f\u0131ms\u0131zd\u0131r.<br \/>\n*   <strong>Dayan\u0131kl\u0131l\u0131k ve G\u00fcvenilirlik:<\/strong> Nesne depolama hizmetleri genellikle verileri birden fazla konumda yedekleyerek y\u00fcksek dayan\u0131kl\u0131l\u0131k ve kullan\u0131labilirlik sunar. Veri kayb\u0131 riski minimaldir.<br \/>\n*   <strong>Maliyet Etkinli\u011fi:<\/strong> Kullan\u0131m ba\u015f\u0131na \u00f6deme (pay-as-you-go) modeli sayesinde yaln\u0131zca kulland\u0131\u011f\u0131n\u0131z depolama alan\u0131 ve transfer miktar\u0131 i\u00e7in \u00f6deme yapars\u0131n\u0131z. Genellikle yerel depolamadan daha uygun maliyetlidir.<br \/>\n*   <strong>Performans:<\/strong> Nesneler genellikle k\u00fcresel olarak da\u011f\u0131t\u0131lm\u0131\u015f a\u011flar \u00fczerinden sunulabilir. \u0130\u00e7erik Da\u011f\u0131t\u0131m A\u011flar\u0131 (CDN) ile entegrasyonu kolayd\u0131r, bu da son kullan\u0131c\u0131lara daha h\u0131zl\u0131 dosya eri\u015fimi sa\u011flar.<br \/>\n*   <strong>Sorumluluklar\u0131n Ayr\u0131lmas\u0131:<\/strong> Dosya depolama y\u00fck\u00fcn\u00fc uygulama sunucusundan alarak, sunucunuzun di\u011fer g\u00f6revlere odaklanmas\u0131n\u0131 sa\u011flar. Bu, mimariyi daha temiz ve y\u00f6netilebilir hale getirir.<\/p>\n<p>Bu makalede, \u00f6ncelikle geleneksel dosya depolama ile nesne depolama aras\u0131ndaki farklar\u0131 inceleyecek, ard\u0131ndan Django entegrasyonu i\u00e7in temel kavramlar\u0131 a\u00e7\u0131klayacak ve son olarak en pop\u00fcler \u00fc\u00e7 nesne depolama sa\u011flay\u0131c\u0131s\u0131 olan AWS S3, Google Cloud Storage ve Azure Blob Storage ile ad\u0131m ad\u0131m kurulum s\u00fcre\u00e7lerini detayland\u0131raca\u011f\u0131z.<\/p>\n<h3>Geleneksel Dosya Depolama ile Nesne Depolama Aras\u0131ndaki Farklar<\/h3>\n<p>Django&#8217;nun varsay\u0131lan dosya depolama sistemi, <code>MEDIA_ROOT<\/code> ve <code>STATIC_ROOT<\/code> ayarlar\u0131yla tan\u0131mlanan dizinlere dosya yazma prensibine dayan\u0131r. Bu y\u00f6ntem, k\u00fc\u00e7\u00fck ve ba\u015flang\u0131\u00e7 seviyesindeki projeler i\u00e7in yeterli olsa da, uygulaman\u0131z b\u00fcy\u00fcd\u00fck\u00e7e veya da\u011f\u0131t\u0131k bir yap\u0131ya b\u00fcr\u00fcnd\u00fck\u00e7e \u00e7e\u015fitli zorluklar ortaya \u00e7\u0131kar:<\/p>\n<p>*   <strong>\u00d6l\u00e7eklenebilirlik S\u0131n\u0131rlamalar\u0131:<\/strong> Uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 sunucunun depolama kapasitesi s\u0131n\u0131rl\u0131d\u0131r. Daha fazla dosya depolamak i\u00e7in sunucunun diskini geni\u015fletmek veya ba\u015fka bir sunucuya ge\u00e7mek gerekir ki bu da karma\u015f\u0131k bir s\u00fcre\u00e7tir.<br \/>\n*   <strong>Tek Hata Noktas\u0131:<\/strong> T\u00fcm dosyalar\u0131n tek bir sunucuda bulunmas\u0131, o sunucunun \u00e7\u00f6kmesi durumunda t\u00fcm dosyalar\u0131n eri\u015filemez hale gelmesine neden olabilir. Bu durum, uygulaman\u0131n dayan\u0131kl\u0131l\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcr\u00fcr.<br \/>\n*   <strong>Yedekleme ve Kurtarma:<\/strong> B\u00fcy\u00fck miktarda veriyi yerel olarak yedeklemek ve gerekti\u011finde kurtarmak zaman al\u0131c\u0131 ve zahmetli olabilir.<br \/>\n*   <strong>Sunucu Ge\u00e7i\u015fleri:<\/strong> Uygulaman\u0131z\u0131 farkl\u0131 bir sunucuya ta\u015f\u0131rken, t\u00fcm medya ve statik dosyalar\u0131 da manuel olarak aktarman\u0131z gerekir. Bu, hata yapmaya a\u00e7\u0131k bir s\u00fcre\u00e7tir.<br \/>\n*   <strong>CDN Entegrasyonu:<\/strong> Yerel olarak depolanan dosyalar\u0131 bir \u0130\u00e7erik Da\u011f\u0131t\u0131m A\u011f\u0131 (CDN) ile entegre etmek, ek yap\u0131land\u0131rma ve karma\u015f\u0131kl\u0131k gerektirir.<\/p>\n<p>Nesne depolama ise bu k\u0131s\u0131tlamalar\u0131n \u00fcstesinden gelir. Nesne depolama sistemleri, dosyalar\u0131 bir dosya sistemi hiyerar\u015fisi yerine d\u00fcz bir yap\u0131 (flat structure) i\u00e7inde &#8220;nesneler&#8221; olarak depolar. Her nesne, verinin kendisi, benzersiz bir anahtar (key) ve iste\u011fe ba\u011fl\u0131 meta verilerden olu\u015fur. Bu yap\u0131, a\u015fa\u011f\u0131daki avantajlar\u0131 sunar:<\/p>\n<p>*   <strong>S\u0131n\u0131rs\u0131z \u00d6l\u00e7eklenebilirlik:<\/strong> Depolama kapasitesi neredeyse s\u0131n\u0131rs\u0131zd\u0131r ve ihtiyaca g\u00f6re otomatik olarak geni\u015fler.<br \/>\n*   <strong>Y\u00fcksek Dayan\u0131kl\u0131l\u0131k:<\/strong> Veriler genellikle birden fazla co\u011frafi b\u00f6lgede veya veri merkezinde \u00e7o\u011falt\u0131l\u0131r, bu da donan\u0131m ar\u0131zalar\u0131na kar\u015f\u0131 y\u00fcksek koruma sa\u011flar.<br \/>\n*   <strong>API Eri\u015fimi:<\/strong> Nesnelere HTTP\/S \u00fczerinden standart API&#8217;ler arac\u0131l\u0131\u011f\u0131yla eri\u015filir. Bu, farkl\u0131 uygulamalar ve hizmetler aras\u0131nda kolay entegrasyon sa\u011flar.<br \/>\n*   <strong>Maliyet Etkinli\u011fi:<\/strong> Genellikle kullan\u0131m ba\u015f\u0131na \u00f6deme modeli sunar ve uzun vadede yerel depolamadan daha uygun maliyetli olabilir.<br \/>\n*   <strong>Y\u00f6netim Kolayl\u0131\u011f\u0131:<\/strong> Depolama altyap\u0131s\u0131n\u0131n y\u00f6netimi sa\u011flay\u0131c\u0131 taraf\u0131ndan yap\u0131l\u0131r, bu da geli\u015ftiricilerin altyap\u0131 yerine uygulama geli\u015ftirmeye odaklanmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Django uygulamalar\u0131nda nesne depolama kullanmak, \u00f6zellikle kullan\u0131c\u0131 taraf\u0131ndan y\u00fcklenen dosyalar (profil resimleri, belgeler, videolar vb.) ve statik dosyalar (CSS, JavaScript, resimler) i\u00e7in b\u00fcy\u00fck avantajlar sa\u011flar. Bu sayede uygulaman\u0131z daha esnek, dayan\u0131kl\u0131 ve performansl\u0131 hale gelir.<\/p>\n<h3>Django Entegrasyonu i\u00e7in Temel Kavramlar<\/h3>\n<p>Django uygulaman\u0131z\u0131 nesne depolama ile entegre etmek i\u00e7in <code>django-storages<\/code> k\u00fct\u00fcphanesi temel bir rol oynar. Bu k\u00fct\u00fcphane, farkl\u0131 bulut depolama sa\u011flay\u0131c\u0131lar\u0131 i\u00e7in bir dizi depolama arka ucu (storage backend) sunarak Django&#8217;nun dosya depolama API&#8217;sini bu hizmetlerle uyumlu hale getirir.<\/p>\n<h4>django-storages K\u00fct\u00fcphanesi<\/h4>\n<p><code>django-storages<\/code>, Django&#8217;nun <code>FileField<\/code> ve <code>ImageField<\/code> gibi alanlar\u0131n\u0131n yan\u0131 s\u0131ra <code>collectstatic<\/code> komutunun da farkl\u0131 depolama sistemleriyle sorunsuz \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayan bir k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcr. Her bir depolama sa\u011flay\u0131c\u0131s\u0131 (AWS S3, Google Cloud Storage, Azure Blob Storage vb.) i\u00e7in \u00f6zel bir depolama arka ucu (\u00f6rne\u011fin, <code>storages.backends.s3boto3.S3Boto3Storage<\/code>) sa\u011flar.<\/p>\n<h4>Depolama Arka U\u00e7lar\u0131 (Storage Backends)<\/h4>\n<p><code>django-storages<\/code> k\u00fct\u00fcphanesi i\u00e7inde bulunan baz\u0131 yayg\u0131n depolama arka u\u00e7lar\u0131 \u015funlard\u0131r:<br \/>\n*   <code>storages.backends.s3boto3.S3Boto3Storage<\/code>: AWS S3 i\u00e7in. <code>boto3<\/code> k\u00fct\u00fcphanesini kullan\u0131r.<br \/>\n*   <code>storages.backends.gcloud.GoogleCloudStorage<\/code>: Google Cloud Storage i\u00e7in. <code>google-cloud-storage<\/code> k\u00fct\u00fcphanesini kullan\u0131r.<br \/>\n*   <code>storages.backends.azure_storage.AzureStorage<\/code>: Azure Blob Storage i\u00e7in. <code>azure-storage-blob<\/code> k\u00fct\u00fcphanesini kullan\u0131r.<br \/>\n*   <code>storages.backends.sftp.SFTPStorage<\/code>: SFTP sunucular\u0131 i\u00e7in.<br \/>\n*   <code>storages.backends.dropbox.DropboxStorage<\/code>: Dropbox i\u00e7in.<\/p>\n<h4>Django Ayarlar\u0131<\/h4>\n<p>Django&#8217;nun <code>settings.py<\/code> dosyas\u0131nda yap\u0131land\u0131r\u0131lmas\u0131 gereken anahtar ayarlar \u015funlard\u0131r:<br \/>\n*   <strong><code>DEFAULT_FILE_STORAGE<\/code><\/strong>: Bu ayar, Django&#8217;nun <code>FileField<\/code> veya <code>ImageField<\/code> gibi alanlar arac\u0131l\u0131\u011f\u0131yla y\u00fcklenen medya dosyalar\u0131n\u0131 depolamak i\u00e7in kullanaca\u011f\u0131 varsay\u0131lan depolama arka ucunu belirtir. \u00d6rne\u011fin:<\/p>\n<pre><code class=\"language-python\">DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'<\/code><\/pre>\n<p>*   <strong><code>STATICFILES_STORAGE<\/code><\/strong>: Bu ayar, <code>collectstatic<\/code> komutunun statik dosyalar\u0131 (CSS, JavaScript, resimler) toplamak ve depolamak i\u00e7in kullanaca\u011f\u0131 depolama arka ucunu belirtir. \u00d6rne\u011fin:<\/p>\n<pre><code class=\"language-python\">STATICFILES_STORAGE = 'storages.backends.s3boto3.S3StaticStorage' # Veya ayn\u0131 S3Boto3Storage<\/code><\/pre>\n<p>    Baz\u0131 durumlarda statik dosyalar i\u00e7in \u00f6zel bir S3 depolama s\u0131n\u0131f\u0131 (<code>S3StaticStorage<\/code>) kullanmak, statik dosyalar\u0131n \u00f6nbellek kontrol ba\u015fl\u0131klar\u0131n\u0131 daha iyi y\u00f6netmenizi sa\u011flayabilir.<br \/>\n*   <strong><code>MEDIA_URL<\/code><\/strong>: Kullan\u0131c\u0131 taraf\u0131ndan y\u00fcklenen medya dosyalar\u0131na eri\u015fim i\u00e7in kullan\u0131lan URL \u00f6nekidir. Nesne depolama ile genellikle bucket URL&#8217;sine veya CDN URL&#8217;sine i\u015faret eder.<br \/>\n*   <strong><code>STATIC_URL<\/code><\/strong>: Statik dosyalara eri\u015fim i\u00e7in kullan\u0131lan URL \u00f6nekidir. Benzer \u015fekilde, bucket URL&#8217;sine veya CDN URL&#8217;sine i\u015faret eder.<\/p>\n<h4>Kimlik Bilgileri ve Eri\u015fim Y\u00f6netimi<\/h4>\n<p>Nesne depolama hizmetlerine eri\u015fmek i\u00e7in kimlik bilgilerine ihtiyac\u0131n\u0131z vard\u0131r. Bu bilgiler genellikle:<br \/>\n*   <strong>Eri\u015fim Anahtarlar\u0131 (Access Keys):<\/strong> Sa\u011flay\u0131c\u0131 taraf\u0131ndan size verilen bir anahtar kimli\u011fi (Access Key ID) ve gizli anahtar (Secret Access Key) \u00e7ifti.<br \/>\n*   <strong>Kova (Bucket) Ad\u0131:<\/strong> Dosyalar\u0131n\u0131z\u0131 depolayaca\u011f\u0131n\u0131z depolama biriminin ad\u0131.<br \/>\n*   <strong>B\u00f6lge (Region):<\/strong> Kovan\u0131z\u0131n fiziksel olarak bulundu\u011fu co\u011frafi b\u00f6lge.<br \/>\n*   <strong>Hizmet Hesab\u0131 (Service Account) Anahtarlar\u0131:<\/strong> \u00d6zellikle Google Cloud Storage gibi sa\u011flay\u0131c\u0131larda JSON format\u0131nda bir hizmet hesab\u0131 anahtar\u0131 dosyas\u0131 kullan\u0131l\u0131r.<\/p>\n<p><strong>\u00d6nemli Not:<\/strong> Kimlik bilgilerini (anahtarlar, parolalar vb.) do\u011frudan <code>settings.py<\/code> dosyas\u0131na yazmak ciddi bir g\u00fcvenlik a\u00e7\u0131\u011f\u0131d\u0131r. Bunun yerine, bu bilgileri ortam de\u011fi\u015fkenleri (environment variables) arac\u0131l\u0131\u011f\u0131yla veya <code>django-environ<\/code> gibi k\u00fct\u00fcphanelerle g\u00fcvenli bir \u015fekilde y\u00f6netmelisiniz.<\/p>\n<p>\u015eimdi, farkl\u0131 nesne depolama sa\u011flay\u0131c\u0131lar\u0131 ile ad\u0131m ad\u0131m kurulum s\u00fcre\u00e7lerini inceleyelim.<\/p>\n<h3>Django ile AWS S3 Kurulumu<\/h3>\n<p>Amazon Web Services (AWS) S3 (Simple Storage Service), en pop\u00fcler nesne depolama hizmetlerinden biridir. Django uygulaman\u0131z\u0131 S3 ile entegre etmek, \u00f6l\u00e7eklenebilir ve g\u00fcvenilir bir dosya depolama \u00e7\u00f6z\u00fcm\u00fc sunar.<\/p>\n<h4>AWS Taraf\u0131nda Yap\u0131land\u0131rma<\/h4>\n<p>1.  <strong>S3 Kovas\u0131 Olu\u015fturma (Create an S3 Bucket):<\/strong><br \/>\n    *   AWS Y\u00f6netim Konsolu&#8217;na giri\u015f yap\u0131n ve S3 hizmetine gidin.<br \/>\n    *   &#8220;Create bucket&#8221; d\u00fc\u011fmesine t\u0131klay\u0131n.<br \/>\n    *   Kova i\u00e7in benzersiz bir ad (\u00f6rne\u011fin, <code>my-django-app-media<\/code>) belirleyin. Bu ad t\u00fcm AWS genelinde benzersiz olmal\u0131d\u0131r.<br \/>\n    *   Kova i\u00e7in bir b\u00f6lge (Region) se\u00e7in (\u00f6rne\u011fin, <code>eu-central-1<\/code> &#8211; Frankfurt). Uygulaman\u0131z\u0131n sunucusuna yak\u0131n bir b\u00f6lge se\u00e7mek gecikmeyi azalt\u0131r.<br \/>\n    *   Varsay\u0131lan ayarlar\u0131 genellikle koruyabilirsiniz. Ancak, e\u011fer dosyalar\u0131n\u0131z\u0131n genel eri\u015fime a\u00e7\u0131k olmas\u0131n\u0131 istiyorsan\u0131z (&#8220;public read&#8221;), &#8220;Block Public Access settings for this bucket&#8221; b\u00f6l\u00fcm\u00fcndeki bloklar\u0131 kald\u0131rman\u0131z ve bir kova politikas\u0131 (bucket policy) eklemeniz gerekebilir. \u00c7o\u011fu durumda, medya dosyalar\u0131 i\u00e7in bu ayarlar\u0131 varsay\u0131lan olarak b\u0131rak\u0131p, eri\u015fimi IAM kullan\u0131c\u0131lar\u0131 veya \u00f6nceden imzalanm\u0131\u015f URL&#8217;ler (pre-signed URLs) ile y\u00f6netmek daha g\u00fcvenlidir. Statik dosyalar i\u00e7in genellikle genel eri\u015fim istenir.<br \/>\n    *   Kovay\u0131 olu\u015fturun.<\/p>\n<p>2.  <strong>IAM Kullan\u0131c\u0131s\u0131 Olu\u015fturma ve \u0130zinleri Ayarlama (Create IAM User and Permissions):<\/strong><br \/>\n    *   AWS Y\u00f6netim Konsolu&#8217;nda IAM (Identity and Access Management) hizmetine gidin.<br \/>\n    *   &#8220;Users&#8221; (Kullan\u0131c\u0131lar) b\u00f6l\u00fcm\u00fcnden &#8220;Add user&#8221; (Kullan\u0131c\u0131 ekle) d\u00fc\u011fmesine t\u0131klay\u0131n.<br \/>\n    *   Kullan\u0131c\u0131 i\u00e7in bir ad belirleyin (\u00f6rne\u011fin, <code>django-s3-user<\/code>).<br \/>\n    *   &#8220;Select AWS access type&#8221; alt\u0131nda &#8220;Programmatic access&#8221; se\u00e7ene\u011fini i\u015faretleyin. Bu, uygulaman\u0131z\u0131n API anahtarlar\u0131 arac\u0131l\u0131\u011f\u0131yla S3&#8217;e eri\u015fmesini sa\u011flar.<br \/>\n    *   \u0130zinler sayfas\u0131nda, &#8220;Attach existing policies directly&#8221; (Mevcut politikalar\u0131 do\u011frudan ekle) se\u00e7ene\u011fini se\u00e7in.<br \/>\n    *   Arama \u00e7ubu\u011funa <code>S3<\/code> yaz\u0131n ve <code>AmazonS3FullAccess<\/code> politikas\u0131n\u0131 se\u00e7in. <strong>\u00dcretim ortam\u0131nda, en az ayr\u0131cal\u0131k ilkesini (principle of least privilege) takip ederek bu politikay\u0131 daha k\u0131s\u0131tl\u0131 bir \u00f6zel politika ile de\u011fi\u015ftirmeniz \u015fiddetle tavsiye edilir.<\/strong> \u00d6rne\u011fin, sadece belirli bir kovaya okuma\/yazma izni veren bir politika olu\u015fturabilirsiniz.<br \/>\n    *   Kullan\u0131c\u0131y\u0131 olu\u015fturun. Olu\u015fturma tamamland\u0131\u011f\u0131nda, &#8220;Access key ID&#8221; ve &#8220;Secret access key&#8221; bilgilerini g\u00f6receksiniz. <strong>Bu anahtarlar\u0131 g\u00fcvenli bir yere kaydedin, \u00e7\u00fcnk\u00fc gizli anahtar\u0131 bir daha g\u00f6remeyeceksiniz.<\/strong><\/p>\n<h4>Django Taraf\u0131nda Yap\u0131land\u0131rma<\/h4>\n<p>1.  <strong>Gerekli K\u00fct\u00fcphaneleri Kurma:<\/strong><\/p>\n<pre><code class=\"language-bash\">pip install django-storages boto3<\/code><\/pre>\n<p>2.  <strong><code>settings.py<\/code> Dosyas\u0131n\u0131 Yap\u0131land\u0131rma:<\/strong><br \/>\n    <code>settings.py<\/code> dosyan\u0131za a\u015fa\u011f\u0131daki ayarlar\u0131 ekleyin. G\u00fcvenlik nedeniyle, bu de\u011ferleri ortam de\u011fi\u015fkenlerinden okuman\u0131z \u015fiddetle tavsiye edilir. <code>django-environ<\/code> gibi bir k\u00fct\u00fcphane bu konuda yard\u0131mc\u0131 olabilir.<\/p>\n<pre><code class=\"language-python\"># settings.py\n\n    # Ortam de\u011fi\u015fkenlerini y\u00fcklemek i\u00e7in (\u00f6rn: django-environ kullanarak)\n    # import environ\n    # env = environ.Env()\n    # environ.Env.read_env() # .env dosyas\u0131n\u0131 okur\n\n    INSTALLED_APPS = [\n        # ... di\u011fer uygulamalar\u0131n\u0131z\n        'storages', # django-storages'\u0131 ekleyin\n    ]\n\n    # AWS S3 Ayarlar\u0131\n    AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID') # Ortam de\u011fi\u015fkeninden oku\n    AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY') # Ortam de\u011fi\u015fkeninden oku\n    AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME') # Ortam de\u011fi\u015fkeninden oku\n    AWS_S3_REGION_NAME = 'eu-central-1' # Kovan\u0131z\u0131n bulundu\u011fu b\u00f6lge\n    AWS_S3_SIGNATURE_VERSION = 's3v4' # G\u00fcvenlik i\u00e7in v4 kullan\u0131n\n    AWS_S3_FILE_OVERWRITE = False # Ayn\u0131 isimde dosya y\u00fcklenirse \u00fczerine yazmas\u0131n\n    AWS_DEFAULT_ACL = None # Varsay\u0131lan ACL. \u00d6zel izinler i\u00e7in 'public-read' veya None\n    # AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'} # Taray\u0131c\u0131 \u00f6nbellek ayar\u0131\n\n    # Opsiyonel: \u00d6zel bir alan ad\u0131 (custom domain) veya CDN kullan\u0131yorsan\u0131z\n    # AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'\n    # AWS_S3_CUSTOM_DOMAIN = 'cdn.example.com' # E\u011fer CloudFront gibi bir CDN kullan\u0131yorsan\u0131z\n\n    # Medya Dosyalar\u0131 (Kullan\u0131c\u0131 taraf\u0131ndan y\u00fcklenenler)\n    DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'\n    MEDIA_URL = f'https:\/\/{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com\/media\/'\n    # E\u011fer \u00f6zel alan ad\u0131 kullan\u0131yorsan\u0131z:\n    # MEDIA_URL = f'https:\/\/{AWS_S3_CUSTOM_DOMAIN}\/media\/'\n\n    # Statik Dosyalar (CSS, JS, Resimler)\n    STATICFILES_STORAGE = 'storages.backends.s3boto3.S3StaticStorage' # Statik dosyalar i\u00e7in \u00f6zel s\u0131n\u0131f\n    STATIC_URL = f'https:\/\/{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com\/static\/'\n    # E\u011fer \u00f6zel alan ad\u0131 kullan\u0131yorsan\u0131z:\n    # STATIC_URL = f'https:\/\/{AWS_S3_CUSTOM_DOMAIN}\/static\/'\n\n    # E\u011fer yerel geli\u015ftirme ortam\u0131nda S3'e y\u00fckleme yapmak istemiyorsan\u0131z,\n    # DEBUG = True oldu\u011funda yerel depolamay\u0131 kullanmak i\u00e7in ko\u015fullu ayarlar yapabilirsiniz.\n    # if DEBUG:\n    #     DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'\n    #     STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'\n    #     MEDIA_URL = '\/media\/'\n    #     STATIC_URL = '\/static\/'\n    #     MEDIA_ROOT = os.path.join(BASE_DIR, 'media')\n    #     STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')<\/code><\/pre>\n<p>    <strong>Not:<\/strong> <code>S3StaticStorage<\/code> s\u0131n\u0131f\u0131, statik dosyalar i\u00e7in uygun \u00f6nbellek kontrol ba\u015fl\u0131klar\u0131n\u0131 otomatik olarak ayarlar. E\u011fer medya ve statik dosyalar\u0131n\u0131z\u0131n ayn\u0131 bucket&#8217;ta farkl\u0131 prefix&#8217;ler alt\u0131nda olmas\u0131n\u0131 istiyorsan\u0131z, <code>MEDIA_URL<\/code> ve <code>STATIC_URL<\/code>&#8216;i yukar\u0131daki gibi yap\u0131land\u0131r\u0131n.<\/p>\n<p>3.  <strong>Kullan\u0131m:<\/strong><br \/>\n    *   <strong>Medya Dosyalar\u0131:<\/strong> Modelinizdeki <code>FileField<\/code> veya <code>ImageField<\/code> alanlar\u0131 otomatik olarak S3&#8217;e y\u00fckleme yapacakt\u0131r.<\/p>\n<pre><code class=\"language-python\"># models.py\n        from django.db import models\n\n        class MyModel(models.Model):\n            name = models.CharField(max_length=100)\n            my_file = models.FileField(upload_to='my_files\/') # my_files\/ prefix'i alt\u0131nda S3'e y\u00fcklenecek\n            my_image = models.ImageField(upload_to='my_images\/') # my_images\/ prefix'i alt\u0131nda S3'e y\u00fcklenecek<\/code><\/pre>\n<p>    *   <strong>Statik Dosyalar:<\/strong><\/p>\n<pre><code class=\"language-bash\">python manage.py collectstatic<\/code><\/pre>\n<p>        Bu komut, uygulaman\u0131zdaki t\u00fcm statik dosyalar\u0131 (admin statikleri dahil) S3 kovan\u0131z\u0131n <code>static\/<\/code> dizinine (veya <code>STATIC_URL<\/code> ile belirtti\u011finiz prefix alt\u0131na) y\u00fckleyecektir.<\/p>\n<p>Bu kurulumla, Django uygulaman\u0131z art\u0131k t\u00fcm medya ve statik dosyalar\u0131n\u0131 AWS S3&#8217;te depolayacakt\u0131r.<\/p>\n<h3>Django ile Google Cloud Storage Kurulumu<\/h3>\n<p>Google Cloud Storage (GCS), Google Cloud Platform&#8217;un (GCP) sundu\u011fu \u00f6l\u00e7eklenebilir ve dayan\u0131kl\u0131 nesne depolama hizmetidir. Django ile entegrasyonu da olduk\u00e7a basittir.<\/p>\n<h4>GCP Taraf\u0131nda Yap\u0131land\u0131rma<\/h4>\n<p>1.  <strong>GCP Projesi Olu\u015fturma:<\/strong><br \/>\n    *   Google Cloud Console&#8217;a giri\u015f yap\u0131n ve yeni bir proje olu\u015fturun veya mevcut bir projeyi se\u00e7in.<br \/>\n2.  <strong>Cloud Storage API&#8217;sini Etkinle\u015ftirme:<\/strong><br \/>\n    *   Projenizin kontrol panelinde &#8220;APIs &#038; Services&#8221; (API&#8217;ler ve Hizmetler) -> &#8220;Library&#8221; (K\u00fct\u00fcphane) b\u00f6l\u00fcm\u00fcne gidin.<br \/>\n    *   &#8220;Cloud Storage API&#8221;yi aray\u0131n ve etkinle\u015ftirin.<br \/>\n3.  <strong>Depolama Kovas\u0131 Olu\u015fturma (Create a Storage Bucket):<\/strong><br \/>\n    *   Google Cloud Console&#8217;da &#8220;Storage&#8221; (Depolama) -> &#8220;Buckets&#8221; (Kovalar) b\u00f6l\u00fcm\u00fcne gidin.<br \/>\n    *   &#8220;CREATE BUCKET&#8221; (Kova Olu\u015ftur) d\u00fc\u011fmesine t\u0131klay\u0131n.<br \/>\n    *   Kova i\u00e7in benzersiz bir ad belirleyin (\u00f6rne\u011fin, <code>my-django-gcs-bucket<\/code>).<br \/>\n    *   Depolama s\u0131n\u0131f\u0131 (Storage class), konumu (Location) ve eri\u015fim kontrol\u00fc (Access control) gibi ayarlar\u0131 yap\u0131n. Genellikle &#8220;Standard&#8221; depolama s\u0131n\u0131f\u0131 ve uygulaman\u0131za yak\u0131n bir b\u00f6lge se\u00e7ilir.<br \/>\n    *   Eri\u015fim kontrol\u00fc i\u00e7in, varsay\u0131lan olarak &#8220;Uniform&#8221; (Tek Tip) ayar\u0131n\u0131 kullanmak daha g\u00fcvenlidir. Dosyalar\u0131n genel eri\u015fime a\u00e7\u0131k olmas\u0131 gerekiyorsa, kova izinlerini buna g\u00f6re ayarlaman\u0131z gerekecektir.<br \/>\n4.  <strong>Hizmet Hesab\u0131 Olu\u015fturma ve Anahtar Yaratma (Create Service Account and Key):<\/strong><br \/>\n    *   Google Cloud Console&#8217;da &#8220;IAM &#038; Admin&#8221; -> &#8220;Service Accounts&#8221; (Hizmet Hesaplar\u0131) b\u00f6l\u00fcm\u00fcne gidin.<br \/>\n    *   &#8220;CREATE SERVICE ACCOUNT&#8221; (Hizmet Hesab\u0131 Olu\u015ftur) d\u00fc\u011fmesine t\u0131klay\u0131n.<br \/>\n    *   Hizmet hesab\u0131 i\u00e7in bir ad (\u00f6rne\u011fin, <code>django-gcs-service<\/code>) ve a\u00e7\u0131klama belirleyin.<br \/>\n    *   &#8220;Grant this service account access to project&#8221; (Bu hizmet hesab\u0131na projeye eri\u015fim izni ver) ad\u0131m\u0131nda, hizmet hesab\u0131na &#8220;Storage Object Admin&#8221; (Depolama Nesne Y\u00f6neticisi) rol\u00fcn\u00fc atay\u0131n. <strong>\u00dcretim ortam\u0131nda, en az ayr\u0131cal\u0131k ilkesini takip ederek bu rol\u00fc daha k\u0131s\u0131tl\u0131 bir \u00f6zel rol ile de\u011fi\u015ftirmeniz \u015fiddetle tavsiye edilir.<\/strong> \u00d6rne\u011fin, sadece belirli bir kovaya okuma\/yazma izni veren bir rol olu\u015fturabilirsiniz.<br \/>\n    *   Hizmet hesab\u0131n\u0131 olu\u015fturduktan sonra, listeden yeni olu\u015fturdu\u011funuz hizmet hesab\u0131na t\u0131klay\u0131n.<br \/>\n    *   &#8220;Keys&#8221; (Anahtarlar) sekmesine gidin ve &#8220;ADD KEY&#8221; (Anahtar Ekle) -> &#8220;Create new key&#8221; (Yeni anahtar olu\u015ftur) se\u00e7ene\u011fini t\u0131klay\u0131n.<br \/>\n    *   Anahtar t\u00fcr\u00fc olarak &#8220;JSON&#8221;\u0131 se\u00e7in ve &#8220;CREATE&#8221; (Olu\u015ftur) d\u00fc\u011fmesine t\u0131klay\u0131n. Bir JSON dosyas\u0131 bilgisayar\u0131n\u0131za indirilecektir. <strong>Bu dosyay\u0131 g\u00fcvenli bir yerde saklay\u0131n, \u00e7\u00fcnk\u00fc uygulaman\u0131z bu dosya arac\u0131l\u0131\u011f\u0131yla GCS&#8217;e kimlik do\u011frulamas\u0131 yapacakt\u0131r.<\/strong><\/p>\n<h4>Django Taraf\u0131nda Yap\u0131land\u0131rma<\/h4>\n<p>1.  <strong>Gerekli K\u00fct\u00fcphaneleri Kurma:<\/strong><\/p>\n<pre><code class=\"language-bash\">pip install django-storages google-cloud-storage<\/code><\/pre>\n<p>2.  <strong><code>settings.py<\/code> Dosyas\u0131n\u0131 Yap\u0131land\u0131rma:<\/strong><br \/>\n    \u0130ndirdi\u011finiz JSON anahtar dosyas\u0131n\u0131 projenizin k\u00f6k dizinine veya g\u00fcvenli bir yere kopyalay\u0131n (\u00f6rne\u011fin, <code>gcs_credentials.json<\/code>). <code>settings.py<\/code> dosyan\u0131za a\u015fa\u011f\u0131daki ayarlar\u0131 ekleyin:<\/p>\n<pre><code class=\"language-python\"># settings.py\n\n    # Ortam de\u011fi\u015fkenlerini y\u00fcklemek i\u00e7in (\u00f6rn: django-environ kullanarak)\n    # import environ\n    # env = environ.Env()\n    # environ.Env.read_env() # .env dosyas\u0131n\u0131 okur\n\n    INSTALLED_APPS = [\n        # ... di\u011fer uygulamalar\u0131n\u0131z\n        'storages', # django-storages'\u0131 ekleyin\n    ]\n\n    # Google Cloud Storage Ayarlar\u0131\n    GS_BUCKET_NAME = os.environ.get('GS_BUCKET_NAME') # Ortam de\u011fi\u015fkeninden oku\n    GS_PROJECT_ID = os.environ.get('GS_PROJECT_ID') # Ortam de\u011fi\u015fkeninden oku\n    \n    # JSON anahtar dosyas\u0131n\u0131n yolu\n    # G\u00fcvenlik i\u00e7in, bu dosyan\u0131n i\u00e7eri\u011fini ortam de\u011fi\u015fkeni olarak da ge\u00e7irebilirsiniz.\n    # \u00d6rne\u011fin: GS_CREDENTIALS = json.loads(os.environ.get('GCS_KEY_JSON'))\n    # Veya dosya yolu:\n    GS_CREDENTIALS = os.path.join(BASE_DIR, 'gcs_credentials.json') # Proje k\u00f6k\u00fcnde oldu\u011funu varsayar\u0131z\n\n    # Medya Dosyalar\u0131\n    DEFAULT_FILE_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage'\n    MEDIA_URL = f'https:\/\/storage.googleapis.com\/{GS_BUCKET_NAME}\/media\/'\n\n    # Statik Dosyalar\n    STATICFILES_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage'\n    STATIC_URL = f'https:\/\/storage.googleapis.com\/{GS_BUCKET_NAME}\/static\/'\n\n    # E\u011fer yerel geli\u015ftirme ortam\u0131nda GCS'e y\u00fckleme yapmak istemiyorsan\u0131z,\n    # DEBUG = True oldu\u011funda yerel depolamay\u0131 kullanmak i\u00e7in ko\u015fullu ayarlar yapabilirsiniz.\n    # if DEBUG:\n    #     DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'\n    #     STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'\n    #     MEDIA_URL = '\/media\/'\n    #     STATIC_URL = '\/static\/'\n    #     MEDIA_ROOT = os.path.join(BASE_DIR, 'media')\n    #     STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')<\/code><\/pre>\n<p>    <strong>Not:<\/strong> <code>GS_CREDENTIALS<\/code> i\u00e7in JSON anahtar dosyas\u0131n\u0131 do\u011frudan belirtmek yerine, \u00fcretim ortam\u0131nda dosyan\u0131n i\u00e7eri\u011fini bir ortam de\u011fi\u015fkeni olarak ge\u00e7irmek ve Python&#8217;da <code>json.loads()<\/code> ile y\u00fcklemek daha g\u00fcvenli bir yakla\u015f\u0131md\u0131r.<\/p>\n<p>3.  <strong>Kullan\u0131m:<\/strong><br \/>\n    *   <strong>Medya Dosyalar\u0131:<\/strong> Modelinizdeki <code>FileField<\/code> veya <code>ImageField<\/code> alanlar\u0131 otomatik olarak GCS&#8217;e y\u00fckleme yapacakt\u0131r.<\/p>\n<pre><code class=\"language-python\"># models.py\n        from django.db import models\n\n        class MyModel(models.Model):\n            name = models.CharField(max_length=100)\n            my_file = models.FileField(upload_to='my_files\/')<\/code><\/pre>\n<p>    *   <strong>Statik Dosyalar:<\/strong><\/p>\n<pre><code class=\"language-bash\">python manage.py collectstatic<\/code><\/pre>\n<p>        Bu komut, t\u00fcm statik dosyalar\u0131n\u0131z\u0131 GCS kovan\u0131z\u0131n <code>static\/<\/code> dizinine y\u00fckleyecektir.<\/p>\n<p>Bu yap\u0131land\u0131rma ile Django uygulaman\u0131z, medya ve statik dosyalar\u0131n\u0131 Google Cloud Storage&#8217;da g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir \u015fekilde depolayacakt\u0131r.<\/p>\n<h3>Django ile Azure Blob Depolama Kurulumu<\/h3>\n<p>Azure Blob Storage, Microsoft Azure&#8217;\u0131n sundu\u011fu nesne depolama hizmetidir. B\u00fcy\u00fck miktarda yap\u0131land\u0131r\u0131lmam\u0131\u015f veriyi depolamak i\u00e7in optimize edilmi\u015ftir. Django ile entegrasyonu da <code>django-storages<\/code> arac\u0131l\u0131\u011f\u0131yla ger\u00e7ekle\u015ftirilebilir.<\/p>\n<h4>Azure Taraf\u0131nda Yap\u0131land\u0131rma<\/h4>\n<p>1.  <strong>Azure Depolama Hesab\u0131 Olu\u015fturma (Create an Azure Storage Account):<\/strong><br \/>\n    *   Azure Portal&#8217;a giri\u015f yap\u0131n.<br \/>\n    *   &#8220;Storage accounts&#8221; (Depolama hesaplar\u0131) hizmetine gidin ve &#8220;Create&#8221; (Olu\u015ftur) d\u00fc\u011fmesine t\u0131klay\u0131n.<br \/>\n    *   Aboneli\u011finizi (Subscription), kaynak grubunuzu (Resource group) se\u00e7in veya yeni bir tane olu\u015fturun.<br \/>\n    *   Depolama hesab\u0131 i\u00e7in benzersiz bir ad (\u00f6rne\u011fin, <code>mydjangoblobstorage<\/code>) belirleyin. Bu ad t\u00fcm Azure genelinde benzersiz olmal\u0131d\u0131r.<br \/>\n    *   Bir konum (Location) se\u00e7in.<br \/>\n    *   Performans ve yedeklilik ayarlar\u0131n\u0131 (\u00f6rne\u011fin, &#8220;Standard&#8221; performans, &#8220;Locally-redundant storage (LRS)&#8221;) uygulaman\u0131z\u0131n gereksinimlerine g\u00f6re yap\u0131land\u0131r\u0131n.<br \/>\n    *   Depolama hesab\u0131n\u0131 olu\u015fturun.<\/p>\n<p>2.  <strong>Blob Kapsay\u0131c\u0131s\u0131 Olu\u015fturma (Create a Blob Container):<\/strong><br \/>\n    *   Olu\u015fturdu\u011funuz depolama hesab\u0131na gidin.<br \/>\n    *   Sol men\u00fcden &#8220;Containers&#8221; (Kapsay\u0131c\u0131lar) se\u00e7ene\u011fini t\u0131klay\u0131n.<br \/>\n    *   &#8220;+ Container&#8221; (Kapsay\u0131c\u0131) d\u00fc\u011fmesine t\u0131klay\u0131n.<br \/>\n    *   Kapsay\u0131c\u0131 i\u00e7in bir ad (\u00f6rne\u011fin, <code>media<\/code> veya <code>static<\/code>) belirleyin.<br \/>\n    *   &#8220;Public access level&#8221; (Genel eri\u015fim d\u00fczeyi) ayar\u0131n\u0131 yap\u0131n.<br \/>\n        *   Medya dosyalar\u0131 i\u00e7in genellikle &#8220;Private (no anonymous access)&#8221; (\u00d6zel) se\u00e7ene\u011fi tercih edilir. Eri\u015fim, SAS tokenlar\u0131 (Shared Access Signatures) veya Azure AD kimlik do\u011frulamas\u0131 ile sa\u011flan\u0131r.<br \/>\n        *   Statik dosyalar i\u00e7in &#8220;Blob (anonymous read access for blobs only)&#8221; (Blob&#8217;lar i\u00e7in anonim okuma eri\u015fimi) veya &#8220;Container (anonymous read access for containers and blobs)&#8221; (Kapsay\u0131c\u0131lar ve blob&#8217;lar i\u00e7in anonim okuma eri\u015fimi) se\u00e7ilebilir.<br \/>\n    *   Kapsay\u0131c\u0131y\u0131 olu\u015fturun.<\/p>\n<p>3.  <strong>Depolama Hesab\u0131 Eri\u015fim Anahtarlar\u0131n\u0131 Alma (Get Storage Account Access Keys):<\/strong><br \/>\n    *   Depolama hesab\u0131n\u0131z\u0131n ana sayfas\u0131na geri d\u00f6n\u00fcn.<br \/>\n    *   Sol men\u00fcden &#8220;Access keys&#8221; (Eri\u015fim anahtarlar\u0131) se\u00e7ene\u011fine t\u0131klay\u0131n.<br \/>\n    *   Burada &#8220;Storage account name&#8221; (Depolama hesab\u0131 ad\u0131) ve iki adet &#8220;Key&#8221; (Anahtar) g\u00f6receksiniz. Bu anahtarlardan herhangi birini kullanabilirsiniz (genellikle Key1 kullan\u0131l\u0131r). <strong>Bu anahtarlar\u0131 g\u00fcvenli bir yere kaydedin.<\/strong><\/p>\n<h4>Django Taraf\u0131nda Yap\u0131land\u0131rma<\/h4>\n<p>1.  <strong>Gerekli K\u00fct\u00fcphaneleri Kurma:<\/strong><\/p>\n<pre><code class=\"language-bash\">pip install django-storages azure-storage-blob<\/code><\/pre>\n<p>2.  <strong><code>settings.py<\/code> Dosyas\u0131n\u0131 Yap\u0131land\u0131rma:<\/strong><br \/>\n    <code>settings.py<\/code> dosyan\u0131za a\u015fa\u011f\u0131daki ayarlar\u0131 ekleyin. G\u00fcvenlik nedeniyle, bu de\u011ferleri ortam de\u011fi\u015fkenlerinden okuman\u0131z \u015fiddetle tavsiye edilir.<\/p>\n<pre><code class=\"language-python\"># settings.py\n\n    # Ortam de\u011fi\u015fkenlerini y\u00fcklemek i\u00e7in (\u00f6rn: django-environ kullanarak)\n    # import environ\n    # env = environ.Env()\n    # environ.Env.read_env() # .env dosyas\u0131n\u0131 okur\n\n    INSTALLED_APPS = [\n        # ... di\u011fer uygulamalar\u0131n\u0131z\n        'storages', # django-storages'\u0131 ekleyin\n    ]\n\n    # Azure Blob Storage Ayarlar\u0131\n    AZURE_ACCOUNT_NAME = os.environ.get('AZURE_ACCOUNT_NAME') # Depolama hesab\u0131 ad\u0131n\u0131z\n    AZURE_ACCOUNT_KEY = os.environ.get('AZURE_ACCOUNT_KEY') # Eri\u015fim anahtar\u0131n\u0131z\n\n    # Medya Dosyalar\u0131\n    AZURE_CONTAINER_MEDIA = 'media' # Medya dosyalar\u0131 i\u00e7in kapsay\u0131c\u0131 ad\u0131n\u0131z\n    DEFAULT_FILE_STORAGE = 'storages.backends.azure_storage.AzureStorage'\n    MEDIA_URL = f'https:\/\/{AZURE_ACCOUNT_NAME}.blob.core.windows.net\/{AZURE_CONTAINER_MEDIA}\/'\n\n    # Statik Dosyalar\n    AZURE_CONTAINER_STATIC = 'static' # Statik dosyalar i\u00e7in kapsay\u0131c\u0131 ad\u0131n\u0131z\n    STATICFILES_STORAGE = 'storages.backends.azure_storage.AzureStorage'\n    STATIC_URL = f'https:\/\/{AZURE_ACCOUNT_NAME}.blob.core.windows.net\/{AZURE_CONTAINER_STATIC}\/'\n\n    # Opsiyonel: \u00d6zel bir alan ad\u0131 (custom domain) veya CDN kullan\u0131yorsan\u0131z\n    # AZURE_CUSTOM_DOMAIN = 'cdn.example.com' # CDN kullan\u0131yorsan\u0131z\n\n    # E\u011fer yerel geli\u015ftirme ortam\u0131nda Azure'a y\u00fckleme yapmak istemiyorsan\u0131z,\n    # DEBUG = True oldu\u011funda yerel depolamay\u0131 kullanmak i\u00e7in ko\u015fullu ayarlar yapabilirsiniz.\n    # if DEBUG:\n    #     DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'\n    #     STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'\n    #     MEDIA_URL = '\/media\/'\n    #     STATIC_URL = '\/static\/'\n    #     MEDIA_ROOT = os.path.join(BASE_DIR, 'media')\n    #     STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')<\/code><\/pre>\n<p>    <strong>Not:<\/strong> Azure i\u00e7in <code>django-storages<\/code> medya ve statik dosyalar\u0131 ayn\u0131 <code>AzureStorage<\/code> backend&#8217;i ile y\u00f6netebilir. Farkl\u0131 kapsay\u0131c\u0131lar kullanmak istiyorsan\u0131z, <code>AZURE_CONTAINER<\/code> ayar\u0131n\u0131 dinamik olarak veya farkl\u0131 depolama s\u0131n\u0131flar\u0131 tan\u0131mlayarak yapman\u0131z gerekebilir. Yukar\u0131daki \u00f6rnekte, varsay\u0131lan olarak <code>AZURE_CONTAINER_MEDIA<\/code> ve <code>AZURE_CONTAINER_STATIC<\/code> ad\u0131nda iki ayr\u0131 kapsay\u0131c\u0131 kullan\u0131ld\u0131\u011f\u0131 varsay\u0131lm\u0131\u015ft\u0131r. <code>django-storages<\/code>&#8216;\u0131n Azure backend&#8217;i, <code>AZURE_CONTAINER<\/code> ayar\u0131n\u0131 kullan\u0131r. Bu nedenle, e\u011fer iki farkl\u0131 kapsay\u0131c\u0131 kullanmak istiyorsan\u0131z, <code>DEFAULT_FILE_STORAGE<\/code> ve <code>STATICFILES_STORAGE<\/code> i\u00e7in kendi \u00f6zel depolama s\u0131n\u0131flar\u0131n\u0131z\u0131 tan\u0131mlaman\u0131z ve her birine farkl\u0131 <code>AZURE_CONTAINER<\/code> de\u011ferleri ataman\u0131z gerekebilir. Basit bir \u00e7\u00f6z\u00fcm olarak, tek bir kapsay\u0131c\u0131 alt\u0131nda <code>media\/<\/code> ve <code>static\/<\/code> dizinleri olu\u015fturmak da m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<p>3.  <strong>Kullan\u0131m:<\/strong><br \/>\n    *   <strong>Medya Dosyalar\u0131:<\/strong> Modelinizdeki <code>FileField<\/code> veya <code>ImageField<\/code> alanlar\u0131 otomatik olarak Azure Blob Storage&#8217;a y\u00fckleme yapacakt\u0131r.<\/p>\n<pre><code class=\"language-python\"># models.py\n        from django.db import models\n\n        class MyModel(models.Model):\n            name = models.CharField(max_length=100)\n            my_file = models.FileField(upload_to='my_files\/')<\/code><\/pre>\n<p>    *   <strong>Statik Dosyalar:<\/strong><\/p>\n<pre><code class=\"language-bash\">python manage.py collectstatic<\/code><\/pre>\n<p>        Bu komut, t\u00fcm statik dosyalar\u0131n\u0131z\u0131 Azure Blob Storage&#8217;daki <code>static<\/code> kapsay\u0131c\u0131s\u0131na (veya belirtti\u011finiz di\u011fer kapsay\u0131c\u0131ya) y\u00fckleyecektir.<\/p>\n<p>Bu kurulumla, Django uygulaman\u0131z\u0131n medya ve statik dosyalar\u0131 Azure Blob Storage&#8217;da depolanacakt\u0131r.<\/p>\n<h3>Genel En \u0130yi Uygulamalar ve Dikkat Edilmesi Gerekenler<\/h3>\n<p>Nesne depolama ile \u00e7al\u0131\u015f\u0131rken uygulaman\u0131z\u0131n g\u00fcvenli\u011fini, performans\u0131n\u0131 ve y\u00f6netilebilirli\u011fini art\u0131rmak i\u00e7in baz\u0131 en iyi uygulamalar\u0131 takip etmek \u00f6nemlidir.<\/p>\n<h4>G\u00fcvenlik<\/h4>\n<p>*   <strong>Kimlik Bilgilerini G\u00fcvenli Tutma:<\/strong> AWS Access Key ID, Secret Access Key, GCP Service Account JSON dosyalar\u0131 veya Azure Account Key gibi hassas kimlik bilgilerini asla do\u011frudan <code>settings.py<\/code> dosyas\u0131na yazmay\u0131n veya s\u00fcr\u00fcm kontrol sistemine (Git) dahil etmeyin. Bunun yerine ortam de\u011fi\u015fkenleri (<code>os.environ<\/code>) veya <code>django-environ<\/code> gibi k\u00fct\u00fcphaneler kullanarak bu bilgileri y\u00f6netin.<br \/>\n*   <strong>En Az Ayr\u0131cal\u0131k \u0130lkesi (Principle of Least Privilege):<\/strong> Bulut sa\u011flay\u0131c\u0131n\u0131zda (AWS IAM, GCP IAM, Azure RBAC) kullan\u0131c\u0131lar veya hizmet hesaplar\u0131 olu\u015ftururken, onlara yaln\u0131zca g\u00f6revlerini yerine getirmek i\u00e7in kesinlikle ihtiya\u00e7 duyduklar\u0131 izinleri verin. <code>FullAccess<\/code> yerine, belirli bir kovaya okuma\/yazma izni veren \u00f6zel politikalar olu\u015fturun.<br \/>\n*   <strong>Kova Politikalar\u0131 ve ACL&#8217;ler:<\/strong> Kova (bucket) ve kapsay\u0131c\u0131 (container) politikalar\u0131n\u0131 dikkatlice yap\u0131land\u0131r\u0131n. Genel eri\u015fim gerektirmeyen dosyalar i\u00e7in eri\u015fimi k\u0131s\u0131tl\u0131 tutun. Hassas verileri asla genel eri\u015fime a\u00e7\u0131k bir kovada saklamay\u0131n.<br \/>\n*   <strong>\u00d6nceden \u0130mzalanm\u0131\u015f URL&#8217;ler (Pre-signed URLs):<\/strong> \u00d6zel (private) olarak depolanan dosyalara ge\u00e7ici eri\u015fim sa\u011flamak i\u00e7in \u00f6nceden imzalanm\u0131\u015f URL&#8217;leri kullan\u0131n. Bu URL&#8217;ler belirli bir s\u00fcre i\u00e7in ge\u00e7erli olup, bu s\u00fcre sonunda otomatik olarak sona erer.<\/p>\n<h4>Performans<\/h4>\n<p>*   <strong>CDN Entegrasyonu:<\/strong> \u0130\u00e7erik Da\u011f\u0131t\u0131m A\u011flar\u0131 (CDN&#8217;ler) (\u00f6rn: AWS CloudFront, Google Cloud CDN, Azure CDN, Cloudflare) kullanarak dosyalar\u0131n son kullan\u0131c\u0131lara daha h\u0131zl\u0131 ula\u015fmas\u0131n\u0131 sa\u011flay\u0131n. CDN&#8217;ler, dosyalar\u0131n\u0131z\u0131n kopyalar\u0131n\u0131 d\u00fcnya genelindeki kenar konumlar\u0131nda \u00f6nbelle\u011fe alarak gecikmeyi azalt\u0131r.<br \/>\n*   <strong>\u00d6nbellek Kontrol\u00fc (Cache Control):<\/strong> Statik dosyalar ve s\u0131k de\u011fi\u015fmeyen medya dosyalar\u0131 i\u00e7in uygun \u00f6nbellek kontrol ba\u015fl\u0131klar\u0131n\u0131 ayarlay\u0131n. Bu, taray\u0131c\u0131lar\u0131n ve CDN&#8217;lerin bu dosyalar\u0131 daha uzun s\u00fcre \u00f6nbellekte tutmas\u0131na olanak tan\u0131r, b\u00f6ylece sunucuya yap\u0131lan istek say\u0131s\u0131 azal\u0131r. <code>AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'}<\/code> gibi ayarlar kullanabilirsiniz.<br \/>\n*   <strong>B\u00f6lge Se\u00e7imi:<\/strong> Depolama kovalar\u0131n\u0131z\u0131 uygulaman\u0131z\u0131n sunucular\u0131na ve hedef kitlenize co\u011frafi olarak yak\u0131n bir b\u00f6lgede olu\u015fturun. Bu, gecikmeyi (latency) azalt\u0131r.<\/p>\n<h4>Maliyet Y\u00f6netimi<\/h4>\n<p>*   <strong>Depolama S\u0131n\u0131flar\u0131:<\/strong> Bulut sa\u011flay\u0131c\u0131lar\u0131 genellikle farkl\u0131 depolama s\u0131n\u0131flar\u0131 sunar (\u00f6rn: AWS S3 Standard, S3 Infrequent Access, S3 Glacier). Dosyalar\u0131n\u0131z\u0131n eri\u015fim s\u0131kl\u0131\u011f\u0131na g\u00f6re uygun depolama s\u0131n\u0131f\u0131n\u0131 se\u00e7erek maliyetleri optimize edebilirsiniz. S\u0131k eri\u015filenler i\u00e7in &#8220;Standard&#8221;, nadiren eri\u015filenler i\u00e7in &#8220;Infrequent Access&#8221; veya &#8220;Archive&#8221; s\u0131n\u0131flar\u0131n\u0131 tercih edin.<br \/>\n*   <strong>\u0130zleme ve Analiz:<\/strong> Depolama kullan\u0131m\u0131n\u0131z\u0131 ve veri transfer maliyetlerinizi d\u00fczenli olarak izleyin. Bulut sa\u011flay\u0131c\u0131lar\u0131n\u0131n sundu\u011fu izleme ara\u00e7lar\u0131 (AWS CloudWatch, GCP Monitoring, Azure Monitor) bu konuda size yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h4>Yerel Geli\u015ftirme Ortam\u0131<\/h4>\n<p>*   <strong>Ko\u015fullu Depolama Ayarlar\u0131:<\/strong> Geli\u015ftirme ortam\u0131nda (DEBUG=True iken) bulut depolama yerine yerel dosya sistemini kullanmak pratik olabilir. Bu, geli\u015ftirme s\u0131ras\u0131nda s\u00fcrekli buluta dosya y\u00fckleme ve indirme trafi\u011fini \u00f6nler. Yukar\u0131daki \u00f6rneklerde g\u00f6sterildi\u011fi gibi <code>if DEBUG:<\/code> blo\u011fu i\u00e7inde yerel depolamay\u0131 ayarlayabilirsiniz.<br \/>\n*   <strong>MinIO Kullan\u0131m\u0131:<\/strong> E\u011fer yerel ortamda da nesne depolama davran\u0131\u015f\u0131n\u0131 sim\u00fcle etmek istiyorsan\u0131z, MinIO gibi a\u00e7\u0131k kaynakl\u0131 bir nesne depolama sunucusunu Docker ile yerel olarak \u00e7al\u0131\u015ft\u0131rabilirsiniz. <code>django-storages<\/code> MinIO ile de uyumludur.<\/p>\n<h4>Dosya Silme ve Y\u00f6netimi<\/h4>\n<p>*   <strong>Model Silme ve Nesne Depolama:<\/strong> Django&#8217;da bir model \u00f6rne\u011fi silindi\u011finde, ili\u015fkili <code>FileField<\/code> veya <code>ImageField<\/code> alanlar\u0131 otomatik olarak nesne depolama hizmetindeki dosyay\u0131 silmez. Bu davran\u0131\u015f\u0131 istiyorsan\u0131z, <code>post_delete<\/code> sinyallerini kullanarak kendi dosya silme mant\u0131\u011f\u0131n\u0131z\u0131 uygulaman\u0131z gerekir.<\/p>\n<pre><code class=\"language-python\"># myapp\/models.py\n    from django.db import models\n    from django.db.models.signals import post_delete\n    from django.dispatch import receiver\n\n    class MyModel(models.Model):\n        name = models.CharField(max_length=100)\n        my_file = models.FileField(upload_to='my_files\/')\n\n    @receiver(post_delete, sender=MyModel)\n    def auto_delete_file_on_delete(sender, instance, <em><\/em>kwargs):\n        \"\"\"\n        Model silindi\u011finde ili\u015fkili dosyay\u0131 nesne depolamadan siler.\n        \"\"\"\n        if instance.my_file:\n            instance.my_file.delete(save=False)<\/code><\/pre>\n<p>*   <strong>Eski Dosyalar\u0131 Temizleme:<\/strong> Uygulaman\u0131zda art\u0131k kullan\u0131lmayan veya eski versiyonlar\u0131 olan dosyalar\u0131 periyodik olarak temizlemek i\u00e7in bir stratejiniz olmal\u0131d\u0131r. Bu, depolama maliyetlerini d\u00fc\u015f\u00fcrmeye yard\u0131mc\u0131 olur.<\/p>\n<h4>\u00c7apraz Kaynak Payla\u015f\u0131m\u0131 (CORS)<\/h4>\n<p>*   Taray\u0131c\u0131 tabanl\u0131 uygulamalar\u0131n\u0131z (frontend JavaScript) nesne depolama hizmetinden dosya y\u00fcklemeye veya indirmeye \u00e7al\u0131\u015f\u0131yorsa, nesne depolama kovan\u0131zda CORS (Cross-Origin Resource Sharing) politikalar\u0131n\u0131 yap\u0131land\u0131rman\u0131z gerekebilir. Bu, farkl\u0131 bir alan ad\u0131ndan gelen isteklerin kabul edilmesini sa\u011flar.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Django uygulamalar\u0131n\u0131zda nesne depolama kullanmak, modern web geli\u015ftirmenin vazge\u00e7ilmez bir par\u00e7as\u0131d\u0131r. Bu makalede ele ald\u0131\u011f\u0131m\u0131z AWS S3, Google Cloud Storage ve Azure Blob Storage gibi hizmetlerle entegrasyon, uygulaman\u0131z\u0131n dosya depolama altyap\u0131s\u0131n\u0131 \u00f6l\u00e7eklenebilir, dayan\u0131kl\u0131, maliyet etkin ve y\u00fcksek performansl\u0131 hale getirir. <code>django-storages<\/code> k\u00fct\u00fcphanesi, bu entegrasyonu son derece basit ve y\u00f6netilebilir k\u0131lar.<\/p>\n<p>Geleneksel yerel dosya depolaman\u0131n s\u0131n\u0131rlamalar\u0131ndan kurtularak, uygulaman\u0131z\u0131n b\u00fcy\u00fcmesiyle birlikte ortaya \u00e7\u0131kacak depolama ihtiya\u00e7lar\u0131na kolayca yan\u0131t verebilirsiniz. G\u00fcvenlik, performans ve maliyet y\u00f6netimi i\u00e7in belirtilen en iyi uygulamalar\u0131 takip etmek, uygulaman\u0131z\u0131n uzun vadeli ba\u015far\u0131s\u0131 i\u00e7in kritik \u00f6neme sahiptir. Nesne depolama, Django projenizin gelece\u011fini g\u00fcvence alt\u0131na alarak, geli\u015ftiricilerin altyap\u0131 sorunlar\u0131 yerine i\u015f mant\u0131\u011f\u0131na odaklanmas\u0131na olanak tan\u0131r. Bu sayede daha sa\u011flam, esnek ve kullan\u0131c\u0131 dostu uygulamalar geli\u015ftirebilirsiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Django ile Nesne Depolama Kurulumu\nGiri\u015f\nModern web uygulamalar\u0131, kullan\u0131c\u0131 taraf\u0131ndan y\u00fcklenen medya dosyalar\u0131, statik i\u00e7erikler ve di\u011fer b","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-32549","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 ile Nesne Depolama Kurulumu - 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-ile-nesne-depolama-kurulumu\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Django ile Nesne Depolama Kurulumu\" \/>\n<meta property=\"og:description\" content=\"Django ile Nesne Depolama Kurulumu Giri\u015f Modern web uygulamalar\u0131, kullan\u0131c\u0131 taraf\u0131ndan y\u00fcklenen medya dosyalar\u0131, statik i\u00e7erikler ve di\u011fer b\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-23T02:41:08+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=\"25 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Django ile Nesne Depolama Kurulumu\",\"datePublished\":\"2025-10-23T02:41:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/\"},\"wordCount\":3934,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/\",\"name\":\"Django ile Nesne Depolama Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-23T02:41:08+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Django ile Nesne Depolama Kurulumu\"}]},{\"@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 ile Nesne Depolama Kurulumu - 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-ile-nesne-depolama-kurulumu\/","og_locale":"tr_TR","og_type":"article","og_title":"Django ile Nesne Depolama Kurulumu","og_description":"Django ile Nesne Depolama Kurulumu Giri\u015f Modern web uygulamalar\u0131, kullan\u0131c\u0131 taraf\u0131ndan y\u00fcklenen medya dosyalar\u0131, statik i\u00e7erikler ve di\u011fer b","og_url":"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-23T02:41:08+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"25 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Django ile Nesne Depolama Kurulumu","datePublished":"2025-10-23T02:41:08+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/"},"wordCount":3934,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/","url":"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/","name":"Django ile Nesne Depolama Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-23T02:41:08+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/django-ile-nesne-depolama-kurulumu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Django ile Nesne Depolama Kurulumu"}]},{"@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\/32549","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=32549"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32549\/revisions"}],"predecessor-version":[{"id":32550,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32549\/revisions\/32550"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32549"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32549"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32549"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}