Files
dj52/IMAGE_API_DOCS.md
Beyhan Oğur ec28a2024d first commit
2026-04-26 22:22:29 +03:00

90 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 `width` x `height` boyutları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_ROOT` ayarında belirtilen dizin altındaki `processed/` klasörüne kaydeder.
* Resmin meta verilerini (`title`, `width`, `height`, `format`, `size`, `quality`, `slug`, `path` vb.) `PostImages` modeline 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ı. `webp` ve `avif` genellikle daha iyi sıkıştırma sunar.
* **Başarılı Yanıt (HTTP 201 Created):**
```json
{
"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`: `PostImageCreateSerializer` ve `PostImagesSerializer` tanımlandı.
* `image/views.py`: `ImageUploadView` eklendi.
* `image/urls.py`: `upload/` URL deseni eklendi.
* `core/urls.py`: `image` uygulaması 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 `slug` değerine sahip `PostImages` nesnesini 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 bir `FileResponse` olarak gönderir.
* **İ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 `slug` ile resim bulunamazsa veya dosya sunucuda yoksa.
* **Değiştirilen Dosyalar:**
* `image/views.py`: `ImageDownloadView` eklendi.
* `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 `PostImages` nesnesi silindiğinde, Django'nun `post_delete` sinyali yakalanır.
* Bu sinyal tetiklendiğinde, silinen `PostImages` nesnesinin `path` alanında belirtilen dosya yolu kullanılarak `MEDIA_ROOT` dizinindeki ilgili resim dosyası silinir.
* **Mekanizma:** Django Sinyalleri
* **Değiştirilen/Oluşturulan Dosyalar:**
* `image/signals.py` (Yeni dosya): `post_delete` alıcısı (`delete_image_file` fonksiyonu) tanımlandı.
* `image/apps.py`: Uygulama başlatıldığında `image.signals`'i içe aktarmak için `ready()` metodu güncellendi.
* `core/settings.py`: `INSTALLED_APPS` listesindeki `'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.