9 Mart 2014 Pazar

Django 1.3 sürümünden itibaren Class Based Views (Sınıf Tabanlı görünüm) konsepti gündeme geldi.  Bu şekilde view fonksiyonlarının yerini python objeleri alır.
Specific HTTP metodları ayrı methodlarla belirlenebilir, nesne tabanlıteknikleri (mixins) gibi daha çok kullanılabilir.

Önce Python’da fonksiyon ve method farkını bir örnekle görelim:
class PrintMe(object):
    def __init__(self, astring):
        self.l = astring 
    def print_me(self):
        print(self.l)
Metodu çalıştıralım:
p = PrintMe("po")
p.print_me()
Fonksiyon:
def print_me(l):
    print l
Fonksiyonu çalıştıralım:
print_me("po")
Ve çıktılar:


Django'da bir HTTP GET için , bir view (görünüm) fonksiyonu şu şekilde:
from django.http import HttpResponse

def any_view(request):
    if request.method == 'GET':
        # kodlarınız
        return HttpResponse('any responce')

CBV’de (Class Based Views) ise :
from django.views.generic import View
class AnyView(View):
    def get(self, request):
        # kodlarınız
        return HttpResponse('any responce')
urls.py’da :
from django.conf.urls import patterns
from anyapp.views import AnyView

urlpatterns = patterns('',
    (r'^any/', AnyView.as_view()),
)

CBV’de, get ve post methodları:
Bir CBV’de, get ve post methodunun argumanları, self , request (HttpRequest) ve URLconf’da belirlediğiniz request argumanıdır:
from django.views.generic import View
class ViewClass(View):
    def get(self, request, arg1, keyword=value):
        return method1()
    def post(self, request, arg1, keyword=value):
        return method2()


Kaynakça:
https://docs.djangoproject.com/en/dev/topics/class-based-views/intro/
http://lgiordani.github.io/blog/2013/10/28/digging-up-django-class-based-views-1/
http://programmer.97things.oreilly.com/wiki/index.php/Don't_Repeat_Yourself

2 yorum :

  1. Güzel yazı teşekkürler devamını bekliyoruz :)

    YanıtlaSil
  2. Emeği geçenlerden Allah razı olsun...

    YanıtlaSil