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.
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.
.flaskenv dosyasına ekle:
FLASK_APP=microblog.py
FLASK_DEBUG=1
Flask, @errorhandler decorator'ı ile özel hata sayfaları tanımlamaya imkân verir.
app/errors.py Dosyasını Oluşturfrom 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
db.session.rollback() — veritabanı hatasından sonra oturumu temiz bir duruma sıfırlar.