03 Nisan 2018 12:06

Muslu Y.

Django

Django 2.0.3 Middleware ile özel hata yakalamak ve anlamlaştırmak

Anasayfa

Django

Django 2.0.3 Middleware ile özel hata yakalamak ve...

dummy

Django da karşılaşılan özel hataları yakalayıp istenilen adrese yönlendirmek yada hata mesajını özelleştirmek için middleware kullanabiliriz.

Middleware katmanı views.py lerde tanımlı fonksiyonlardan önce ve sonra çalışan ve tüm sayfalardaki sorgu ve işlemlerin tkaip edileceği katmandır.

Proje klasörünüzün altında herhangi bir uygulamanızın altında middleware adında bir klasör oluşturup içine hatalar.py adında bir dosya oluşturalım ve içine alttaki kodları ekleyelim.

 hatalar.py

from django.conf import settings
from django.shortcuts import redirect


class HataYakala:
  def __init__(self, get_response):
    self.get_response = get_response # İlk seferde 1 kere çalışır

  def __call__(self, request):
# sorgu öncesi çalışan alan
    response = self.get_response(request)
# sorgu sonrası çalışan alan
    return response
  def process_exception(self, request, exception): # settings.py de DEBUG aktif edildi ise ( DEBUG = TRUE )
    if settings.DEBUG:
      if exception.__class__.__name__ == "AuthCanceled": # hatanın sınıf adını öğreniyoruz. Örnek olarak django_social_auth a ait bir hata
        return redirect("/") # Hata yakalandığında yapılacak işlem

      return None # Herhangi bir koşula denk gelinmez ise
 

 

settings.py

MIDDLEWARE                                      =       [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'social_django.middleware.SocialAuthExceptionMiddleware',
'araclar.middleware.hatalar.HataYakala',
]
 

Kodlarda örnek olarak Django Social Auth kütüphanesi anlatıldı. Herhangi bir hata yakalandığında yapılacak işlemleri siz seçebilirsiniz.

İsterseniz hata yakalandığında mail gönderme, veritabanına kayıt etme gibi işlemleri deneyebilirsiniz. 

Django

hakkında diğer konular

Makdos Bilişim Teknolojileri 2015 - 2025