5.2 KiB
Resim API Endpoint'leri ve Dosya Yönetimi Dokümantasyonu
Bu belge, Django projenize eklenen yeni resim API endpoint'lerini ve ilgili dosya yönetimi özelliklerini açıklamaktadır.
1. Resim Yükleme ve Optimizasyon API Endpoint'i
Bu endpoint, resimleri yüklemenizi, boyutlandırmanızı, formatlarını değiştirmenizi ve kalitelerini ayarlamanızı sağlar. Yüklenen resimler en-boy oranı korunarak hedef boyutlara sığdırılır ve boş kalan alanlar doldurulur.
- Endpoint:
POST /api/v1/images/upload/ - İşlevsellik:
- Kullanıcı tarafından gönderilen bir resim dosyasını alır.
- Belirtilen genişlik, yükseklik, kalite ve format parametrelerine göre resmi işler.
- Resmi, en-boy oranını bozmadan hedef
widthxheightboyutlarına sığdırır. Kenarlarda kalan boşlukları (padding), PNG için şeffaf, diğer formatlar için (JPG, WebP, AVIF) beyaz renkle doldurur. - İşlenmiş resmi Django'nun
MEDIA_ROOTayarında belirtilen dizin altındakiprocessed/klasörüne kaydeder. - Resmin meta verilerini (
title,width,height,format,size,quality,slug,pathvb.)PostImagesmodeline kaydeder.
- İstek Metodu:
POST Content-Type:multipart/form-data- Parametreler (Form Data):
image: (File) Yüklenecek resim dosyası.title: (string, max_length=254) Resim için bir başlık.width: (integer) İşlenmiş resmin hedef genişliği (piksel).height: (integer) İşlenmiş resmin hedef yüksekliği (piksel).quality: (integer, 1-100, varsayılan: 85) JPG ve WebP gibi kayıplı formatlar için resmin sıkıştırma kalitesi. Daha düşük değerler dosya boyutunu azaltır.format: (string, seçimler:png,webp,jpg,avif, varsayılan:webp) Çıktı resminin dosya formatı.webpveavifgenellikle daha iyi sıkıştırma sunar.
- Başarılı Yanıt (HTTP 201 Created):
{ "id": 1, "title": "Yuklenen Resim Basligi", "path": "processed/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.webp", "processed_path": "original_image_name.jpg", "original_filename": "original_image_name.jpg", "format": "webp", "width": 800, "height": 600, "size": 123456, "quality": 85, "slug": "yuklenen-resim-basligi", "created_at": "2023-10-27T10:00:00Z", "updated_at": "2023-10-27T10:00:00Z", "is_active": true, "is_front": true } - Değiştirilen/Oluşturulan Dosyalar:
image/serializers.py:PostImageCreateSerializervePostImagesSerializertanımlandı.image/views.py:ImageUploadVieweklendi.image/urls.py:upload/URL deseni eklendi.core/urls.py:imageuygulaması URL'leri/api/v1/images/altında dahil edildi.
2. Resim İndirme API Endpoint'i
Bu endpoint, önceden işlenmiş bir resmi slug'ını kullanarak doğrudan indirmek için kullanılır.
- Endpoint:
GET /api/v1/images/<slug>/download/<slug>: İndirilmek istenen resmin benzersiz slug değeri. Bu değer, yükleme endpoint'inden dönen yanıtta bulunur.
- İşlevsellik:
- URL'den alınan
slugdeğerine sahipPostImagesnesnesini veritabanından bulur. - İlişkili resim dosyasını sunucudan okur.
- Resmi, tarayıcının indirme işlemi başlatmasını sağlayacak uygun HTTP başlıkları (
Content-Type,Content-Disposition) ile birFileResponseolarak gönderir.
- URL'den alınan
- İstek Metodu:
GET - Başarılı Yanıt (HTTP 200 OK): Doğrudan resim dosyası içeriği döner, tarayıcı tarafından indirme işlemi başlatılır.
- Hata Durumları (HTTP 404 Not Found): Belirtilen
slugile resim bulunamazsa veya dosya sunucuda yoksa. - Değiştirilen Dosyalar:
image/views.py:ImageDownloadVieweklendi.image/urls.py:<slug>/download/URL deseni eklendi.
3. Model Silindiğinde Otomatik Dosya Silme
Bu özellik, PostImages modelinden bir kayıt silindiğinde, ilişkili resim dosyasının sunucudan otomatik olarak kaldırılmasını sağlar.
- İşlevsellik:
- Django admin panelinden veya kod aracılığıyla bir
PostImagesnesnesi silindiğinde, Django'nunpost_deletesinyali yakalanır. - Bu sinyal tetiklendiğinde, silinen
PostImagesnesnesininpathalanında belirtilen dosya yolu kullanılarakMEDIA_ROOTdizinindeki ilgili resim dosyası silinir.
- Django admin panelinden veya kod aracılığıyla bir
- Mekanizma: Django Sinyalleri
- Değiştirilen/Oluşturulan Dosyalar:
image/signals.py(Yeni dosya):post_deletealıcısı (delete_image_filefonksiyonu) tanımlandı.image/apps.py: Uygulama başlatıldığındaimage.signals'i içe aktarmak içinready()metodu güncellendi.core/settings.py:INSTALLED_APPSlistesindeki'image'girdisi,'image.apps.ImageConfig'olarak değiştirilerek sinyal mekanizmasının doğru şekilde çalışması sağlandı.
Not: Bu değişikliklerin geçerli olması için Django geliştirme sunucunuzu yeniden başlatmanız gerekebilir. Ayrıca, settings.py dosyasında MEDIA_ROOT ve MEDIA_URL ayarlarının doğru yapıldığından emin olun.