Giriş


Bu bölümde yeni özellik geliştirmek yerine Flask uygulamalarında hata yönetimi ele alınacak. Debug modu, özel hata sayfaları, e-posta ile hata bildirimi, dosyaya loglama ve Bölüm 6'da bırakılan bir bug'ın düzeltilmesi konuları işlenecek.


Flask'ta Hata Yönetimi

Bölüm 6'da bırakılan bug: profil düzenleme formunda başka bir kullanıcıya ait kullanıcı adı girildiğinde uygulama çöker. SQLAlchemy, veritabanının UNIQUE kısıtlamasını ihlal ettiği için hata fırlatır:

sqlite3.IntegrityError: UNIQUE constraint failed: user.username


Kullanıcıya gösterilen hata sayfası hem çirkin hem de uygulama düzeniyle uyumsuz. Bu bölümde tüm bunlar düzeltilecek.

---

## Debug Modu

Geliştirme sırasında Flask'ın **debug modunu** etkinleştirmek iki önemli özellik kazandırır:

1. **Tarayıcı üzerinde interaktif hata ayıklayıcı (debugger)** — hata olduğunda stack trace ve Python komut satırına tarayıcıdan erişim sağlar.
2. **Otomatik yeniden başlatma (reloader)** — kaynak dosyası değiştirildiğinde sunucu otomatik olarak yeniden başlar.

### Debug Modunu Etkinleştirme

```bash
(venv) $ export FLASK_DEBUG=1   # Linux/macOS
set FLASK_DEBUG=1               # Windows

⚠️ Uyarı: Debug modu üretim sunucusunda kesinlikle kullanılmamalıdır. Tarayıcı üzerinden sunucuda uzaktan kod çalıştırılmasına izin verir.

Debug Modunu Kalıcı Hale Getirme

.flaskenv dosyasına ekle:

FLASK_APP=microblog.py
FLASK_DEBUG=1

Özel Hata Sayfaları

Flask, @errorhandler decorator'ı ile özel hata sayfaları tanımlamaya imkân verir.

app/errors.py Dosyasını Oluştur

from flask import render_template
from app import app, db

@app.errorhandler(404)
def not_found_error(error):
    return render_template('404.html'), 404

@app.errorhandler(500)
def internal_error(error):
    db.session.rollback()
    return render_template('500.html'), 500