Günlük harcamalarımızı kontrol altında tutmak, finansal farkındalık kazanmanın ilk adımıdır. Hazır uygulamalar olsa da, kendi ihtiyaçlarımıza göre özelleştirebildiğimiz, verilerimizin tamamen bizim kontrolümüzde olduğu sade bir araç geliştirmek hem öğretici hem de oldukça tatmin edicidir.
Bu yazıda; Python, Flask ve SQLite kullanarak geliştirdiğim, görsel raporlama yeteneklerine sahip kapsamlı bir “Gider Takip Uygulaması”nın detaylarını inceleyeceğiz.
🚀 Uygulamanın Sunduğu Özellikler
Bu uygulama, sadece veri girişi yapılan bir liste değil, aynı zamanda harcama alışkanlıklarınızı analiz edebileceğiniz küçük bir finansal merkezdir:
- Kolay Harcama Kaydı: Açıklama, tutar, kategori ve tarih bilgileriyle hızlıca işlem ekleme.
- Dinamik Dashboard: Toplam, aylık ve haftalık harcamaları anlık olarak gösteren istatistik kartları.
- Kategori Analizi: Harcamaların hangi kategorilerde yoğunlaştığını gösteren interaktif Doughnut (Halka) Grafik.
- Detaylı Aylık Raporlar: Seçilen aya ait günlük harcama trendlerini gösteren Sütun Grafikler ve kategori bazlı dağılım tabloları.
- Esnek Yönetim: Hatalı girilen kayıtları tek tıkla silebilme imkanı.
🛠️ Kodun Anatomisi
Proje, sorumlulukların ayrılması (separation of concerns) prensibine uygun olarak modüler bir yapıda tasarlanmıştır.
Proje Bilgileri
- Yazar: Ahmet Aksoy
- Tarih: 19 Nisan 2026
- Ortam: Python 3.12 / Ubuntu 24.04
- Teknolojiler: Flask, SQLite, Chart.js
Dosya Yapısı ve Görevleri
expense_app.py: Uygulamanın giriş noktasıdır. Veritabanının varlığını kontrol eder, Flask uygulamasını başlatır ve port yapılandırmasını yönetir.expense_helpers.py: Uygulamanın “beyni” diyebiliriz. Tüm veritabanı sorguları, hesaplama mantığı (istatistikler, günlük toplamlar) ve Flask rota tanımlamaları burada yer alır.expense_templates/: Kullanıcı arayüzünün (UI) bulunduğu Jinja2 şablonlarıdır.base.htmlgenel iskeleti sağlarken;index.html,add.htmlvereport.htmlsayfaların özel içeriklerini yönetir.
🔍 Teknik Detaylar ve Uygulama Mantığı
1. SQLite ile Veri Yönetimi
Uygulama, kurulum gerektirmeyen hafif bir veritabanı olan SQLite kullanır. Veritabanı şeması oldukça sadedir; harcamanın ne olduğu, ne kadar olduğu, hangi kategoriye ait olduğu ve hangi tarihte yapıldığı saklanır.
Özellikle row_factory = sqlite3.Row kullanımı, veritabanından dönen sonuçlara sütun isimleriyle (sözlük yapısında) erişmemizi sağlayarak kodun okunabilirliğini artırır.
2. Veri Analizi ve İstatistikler
Sadece veriyi kaydetmek yetmez, onu anlamlandırmak gerekir. get_stats fonksiyonu ile şu anki tarihe göre dinamik filtrelemeler yapılır:
- Aylık Toplam:
LIKE '2026-06%'gibi bir sorgu ile mevcut ayın tüm harcamaları toplanır. - Haftalık Toplam:
timedeltakullanılarak haftanın başlangıç tarihi hesaplanır ve bu tarihten büyük olan tüm kayıtlar filtrelenir.
3. Görselleştirme: Chart.js Entegrasyonu
Kullanıcıya rakamlardan ziyade grafikler sunmak, veriyi çok daha hızlı anlamasını sağlar. Frontend tarafında Chart.js kütüphanesi kullanılmıştır.
Python tarafında hazırlanan listeler (cat_labels ve cat_values), Jinja2 şablonları üzerinden JSON formatına dönüştürülerek JavaScript’e aktarılır. Böylece backend’de hesaplanan gerçek veriler, frontend’de şık grafiklere dönüşür.
# expense_helpers.py'den bir kesit: Kategori verilerini toplama
def get_cat_data(conn, year=None, month=None):
if year and month:
month_str = f"{year}-{month:02d}"
rows = conn.execute(
"SELECT category, SUM(amount) as total, COUNT(*) as cnt "
"FROM expenses WHERE date LIKE ? "
"GROUP BY category ORDER BY total DESC",
(month_str + '%',)
).fetchall()
# ...
return [row_to_dict(r) for r in rows]
4. Kullanıcı Deneyimi (UX) ve Arayüz
Modern bir görünüm için CSS ile sade ve temiz bir tasarım tercih edilmiştir. base.html içerisinde tanımlanan ortak yapı sayesinde navigasyon ve bildirimler (flash messages) tüm sayfalarda tutarlı bir şekilde çalışır.
💡 Sonuç ve Öğrenimler
Bu proje; bir web uygulamasının temel yaşam döngüsünü (Veri Girişi $\rightarrow$ Veritabanı $\rightarrow$ İşleme $\rightarrow$ Görselleştirme) anlamak için harika bir örnektir. Flask’ın hafifliği ve SQLite’ın pratikliği, hızlı prototipleme yapmak isteyen geliştiriciler için ideal bir kombinasyondur.
Kendi finansal takibinizi yapmak için bu projeyi temel alabilir, üzerine “Bütçe Sınırı Uyarıları” veya “Kullanıcı Giriş Sistemi” gibi yeni özellikler ekleyerek geliştirebilirsiniz.
Ahmet Aksoy
Not: Bu yazıda incelediğimiz kodu ve benzer projelerin kaynak kodlarını https://github.com/ahmetax/practical-python-examples adresinde bulabilirsiniz.
#python #flask #sqlite #verigörselleştirme #finansyönetimi