first commit
This commit is contained in:
89
IMAGE_API_DOCS.md
Normal file
89
IMAGE_API_DOCS.md
Normal file
@@ -0,0 +1,89 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user