2017年11月9日 星期四

Django - CBV筆記

之前這筆記都是使用FBV(Function Based Views),以下與CBV(Class Based Views)做對照:

#FBC
def index(request):
    return render(request, 'index.html')

#CBV
class IndexView(TemplateView):
    template_name = 'index.html'


快速體驗CBV

# views.py
from django.views.generic import View

class CBView(View):
def get(self, request):
return HttpResponse('Class Based View are Cool!')

# urls.py
from basic_app import views

url(r'^$', views.CBView.as_view()),



TemplateView應用

from django.views.generic import TemplateView

# views.py
class IndexView(TemplateView):
    template_name = 'index.html'

    # for injection
    def get_context_data(self,**kwargs): # 雙*代表字典,單*代表Tuple
     context = super(IndexView, self).get_context_data(**kwargs)
     context['injectme'] = 'Basic Injection!'
     return context
    
#urls.py
url(r'^$', views.IndexView.as_view()),





ListView應用

from django.views.generic import ListView

class SchoolListView(ListView):
context_object_name = 'schools' # 沒有使用context_object_name django將預設成 school_list
model = models.School



DetailView應用



from django.views.generic import DetailView

class SchoolDetailView(DetailView):
context_object_name = 'school_detail' # 未設定
model = models.School
template_name = 'basic_app/school_detail.html'


url(r'^(?P<pk>\d+)/$', views.SchoolDetailView.as_view(),name='detail'),



CreateView應用

class SchoolCreateView(CreateView):
fields = ('name', 'principal', 'location')
model = models.School
之後要記得去School Model 加上get_absolute_url設定轉換的頁面
url(r'^create/$', views.SchoolCreateView.as_view(), name='create'),



UpdateView應用

class SchoolUpdateView(UpdateView):
fields = ('name','principal')
model = models.School

url(r'^update/(?P<pk>\d+)/$', views.SchoolUpdateView.as_view(),name='update'),


DeleteView應用









沒有留言:

張貼留言