Problem
Kayıp bir hayvan için paylaşılan fotoğraf ancak doğru bilgiyle birlikte işe yarıyor: nerede ve ne zaman görüldü, kim haber verdi, sahibine nasıl ulaşılacak? PetFinder’da ilanı, fotoğraflı görülme bildirimini ve platform içi iletişimi aynı akışta topladık. Uygulamayı iki kişilik ekiple Django üzerinde geliştirdik.
Full-stack uygulama
Backend’de Django ORM, Forms ve kullanıcı sistemi; frontend’de Django Templates, sayfaya özel CSS ve JavaScript kullanılıyor. SQLite üzerinde ilanlar, kullanıcı profilleri, etiketler, görülme bildirimleri ve mesajlar tutuluyor.
Pet ile Tag arasında many-to-many, ilan ile bildirim arasında one-to-many, kullanıcı ile profil arasında one-to-one ilişkisi var. Bu model, bir ilana birden fazla etiket ve görülme bildirimi bağlamayı sağlıyor.
Kullanıcı akışları
Kullanıcı ilan ekleyebiliyor, kendi ilanını düzenleyip silebiliyor. Ad, tür ve yaşa göre arama yapılabiliyor. Görülme formunda konum, tarih, not, iletişim yöntemi ve fotoğraf alanları bulunuyor.

Hesap bölümünde kayıt, giriş/çıkış, profil fotoğrafı ve parola işlemleri var. Kullanıcılar kendi ilanlarını CSV olarak dışa aktarabiliyor veya CSV’den yeni ilanlar ekleyebiliyor. Özel admin ekranları, ilan ve bildirim yönetimini standart Django admin panelinin yanında sunuyor.
Mesajlaşma ve tasarım kararları
Mesajlar gönderici/alıcı ilişkisi, zaman damgası ve okundu bilgisiyle kaydediliyor. Tarayıcı yeni mesajları 5 saniyelik HTTP polling ile alıyor. Bu sürümde WebSocket kullanılmıyor.
Django’nun form ve view sınıfları kalıtımla özelleştirildi. Model, form, view ve template ayrımı arayüzle veri işlemlerini düzenli tutuyor. İlan düzenleme ve silmede kullanıcı sahipliği sorgu seviyesinde kontrol ediliyor.
Sonuç ve geliştirme alanları
İlan CRUD, fotoğraflı bildirim, arama, hesap yönetimi, CSV aktarımı ve mesajlaşma tek web uygulamasında çalışacak şekilde geliştirildi. İlk sürümde otomatik test kapsamı bulunmuyor; admin etiket işlemlerinde ve mesaj endpoint’lerinde erişim kontrollerinin tutarlı hâle getirilmesi gerekiyor. Sahiplendirme için veri modeli mevcut olsa da tamamlanmış kullanıcı akışının parçası değil.
