2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Django]関数ベースビューとクラスベースビュー

Last updated at Posted at 2021-03-11

#はじめに
Djangoのビューを今まで関数ベースビューメインで書いていましたが、
今回はDjangoフレームワークが用意しているビュー用の親クラスを継承しクラスベースのビューを作成したいので両者を簡単にまとめました。

##関数ベースビュー
関数ベースビューは以下のような構造をしています。

app/views.py
def hoge(request):
  [内部処理]
  return HTTPレスポンス

以下実例です。

app/views.py
def view(request):
  if request.method=='POST':
    form=HogeForm(request.POST)
    if form.is_valid():
      form.save()
      return redirect('hoge')
  else:
    form=HogeForm()

  context = {
      'form': form,
  }
  return render(request,'hoge.html',context)

hoge.htmlというテンプレートをロードし、contextという辞書変数にテンプレート変数名とその値を格納し、
renderクラスでテンプレートをレンダリングしその結果をHTTPResponseとして返します。
HTTPResponseを行うクラスはrender,redirect,TemplateResponseの3つ。詳しくはここ

##クラスベースビュー
Djangoフレームワークで用意されたビュー用の親クラスを継承し使用します。

app/viwes.py

class View(LoginRequiredMixin,FormView):
  template_name='hoge.html'
  form_class=HogeForm
  success_url=reverse_lazy('hoge')

  def get_context_data(self, **kwargs):
       context=super().get_context_data(self, **kwargs)
       return context

  #formでの入力が正常であった場合に呼ばれる
  def form_valid(self,form):
    form.save()
    messages.success(self.request, "success")
    #return HttpResponseRedirect(self.get_success_url())
    return render(self.request,'hoge',self.get_context_data())

cotext変数→get_context_data関数
HTTPResponse→form_valid/form_invalid関数
と対応しています。

なお、クラスベースビューはurls.pyに登録する際はpathの第2引数は関数を渡す必要があるためView.as_view()のようにします。

app/urls.py
urlpatterns=[
  path('hoge/',View.as_view(),name='hoge')
]

##まとめ
クラスベースビューは関数ベースビューを汎用化してくれているためたくさん定義する場合はできる限りクラスベースビューで書くのがいいかなと個人的に思います。

##参考サイト
https://ebi-works.com/django-view/
https://docs.djangoproject.com/ja/3.1/intro/tutorial03/

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?