Django View

MTVフレームワーク

Djangoでは一般のフレームワークで言うcontrollerの機能はviewにある

MVCフレームワーク MTVフレームワーク
model model
view template
controller view

View種類

関数ベースビュー

from django.http import HttpResponse

@require_http_methods([“POST”])
def hello(request):
 return HttpResponse(“hello”)

・メソッドに付加するアノテーションでhttpリクエストメソッド(get/post等)を定義

クラスベースビュー

from django.http import HttpResponse

class HelloView(View):
 def get(self, request, *args, **kwargs):
  return HttpResponse(“hello”)

・クラス名の引数に汎用ビューを定義
・クラス内メソッドにhttpリクエストメソッド(get/post等)を定義

クラス内メソッド

get

from .models import Test

def get(self, request, *args, **kwargs):
 context = {
  ”object_list”: Test.objects.all(),
 }
 return render(request, ‘〜/index.html’, context)

get_context_data

from .models import Test

def get_context_data(self, **kwargs):
 ctx = super().get_context_data(**kwargs)
 ctx[‘object_list’] = Test.objects.all()
 return ctx

汎用ビュー

View種類 機能
TemplateView htmlテンプレート表示
ListView 複数レコード表示
DetailView 単一レコード表示
CreateView レコード追加
UpdateView レコード更新
DeleteView レコード削除
TemplateView

from django.views.generic import TemplateView

class IndexView(TemplateView):
 template_name = ‘index.html’

ListView

from django.views.generic import ListView
from .models import TestModel

class TestListView(ListView):
 template_name = ‘test/list.html’
 model = TestModel
  #省略可。省略時は{{ object_list }}で呼び出し
 context_object_name = ‘tests’
 paginate_by = 10

DetailView

from django.views.generic import DetailView
from .models import TestModel

class TestModelDetailView(DetailView):
 template_name = ‘test/detail.html’
 model = TestModel
  #省略可。省略時は{{ object }}で呼び出し
 context_object_name = ‘test’

CreateView

from django.views.generic import CreateView
from django.urls import reverse_lazy
from .models import TestModel

class TestModelCreateView(CreateView):
 template_name = ‘test/create.html’
 対象model
 model = TestModel
 fields = [‘title’, ‘body’]
 処理成功時のリダイレクトURL
 success_url = reverse_lazy(‘sample_app:index’)

UpdateView

from django.views.generic import UpdateView
from django.urls import reverse_lazy
from .models import TestModel

class BoardPostUpdateView(UpdateView):
 template_name = ‘test/update.html’
 model = TestModel
 fields = [‘title’, ‘body’]
 処理成功時のリダイレクトURL
 success_url = reverse_lazy(‘sample_app:index’)

DeleteView

from django.views.generic import DeleteView
from django.urls import reverse_lazy
from .models import TestModel

class BoardPostDeleteView(DeleteView):
 template_name = ‘test/update.html’
 model = TestModel
 処理成功時のリダイレクトURL
 success_url = reverse_lazy(‘sample_app:index’)

Django

前の記事

Django Model