【Django】ビュー関数をクラス化する

index関数の中でGETとPOSTの処理をしていると、1つのビュー関数だけでGET時の処理とPOST時の処理を用意しなければなりません。より複雑な作業を行わせるようになると、いろいろ処理が複雑になります。
そこで、TemplateViewクラスを利用します。
TemplateViewクラスはビューを扱うViewクラスの派生クラスです。
クラス内にはgetとpostといったメソッドを用意することができます。

まずは、HelloViewクラスを作ります。
hello/views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import TemplateView
from .forms import HelloForm

class HelloView(TemplateView):
  
  def __init__(self):
    self.params = {
      'title': 'Hello',
      'message': 'your data:',
      'form': HelloForm()
    }
  
  def get(self, request):
    return render(request, 'hello/index.html', self.params)

  def post(self, request):
    msg = 'あなたは、<b>' + request.POST['name'] + \
      '(' + request.POST['age'] + \
      ')</b>さんです。<br>メールアドレスは <b>' + request.POST['mail'] + \
      '</b> ですね。'
    self.params['message'] = msg
    self.params['form'] = HelloForm(request.POST)
    return render(request, 'hello/index.html', self.params)

urlpatternsを修正します。

hello/urls.py

from django.urls import path
from .views import HelloView

urlpatterns = [
  path('', HelloView.as_view(), name='index'),
]

webブラウザにてアクセスします。

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

関連記事

コメント

この記事へのコメントはありません。