【django】viewsてなに?クラス・関数ビューを解説

スポンサーリンク
Django

この記事でお伝えすること

  • views.pyの役割や機能、使い方
  • クラスベースのビューと関数ベースのビューの違い
  • クラスベースのビューと関数ベースのビューの具体例

を紹介していきます。

djangoを学び始めた初心者にとって、views.pyの役割や機能は理解しにくいです。

viewにはリクエストが来てテンプレートを出力するという説明が多いですが
本来は、それだけではなく多数の役割・機能を持っています。

しかし、どんな役割を持つか、それは何に使われるのかはあまり説明されません。

本記事ではdjango初心者でもわかりやすく、そのviews.pyの役割や使い方を解説していきます

また、これも初心者を混乱させるdjangoの特徴として
viewにはクラスベースのビュー関数ベースのビューの2種類があります。

この2つはどういった機能を持つか、何が違うのかもお伝えしていきます

本記事では、viewの役割、機能や使い方クラスベースのビューと関数ベースのビューの機能、違いについて解説していきます。

viewの役割

まず、djangoの基礎として「MTV」という言葉があります。

これはそれぞれM:モデルT:テンプレートV:ビューのことを指します。

このMTVはdjangoなどのwebアプリケーションのフレームワークでは以下のような機能の区分けとして使われます。

  • (ビューで)どのページを表示するか指定し
  • (モデルから)データを引っ張ってきて
  • (ビューで)データを編集・整理し
  • (テンプレートで)データを表示する

この流れができてます。ただ3番目のデータ編集はない場合もあります。

ここで既に出ましたが、djangoのviews.pyはMTVのVの役割を持っています。

具体的には、URLからどのページを出力するか指定

データベースからデータをやり取り、そのデータを編集、整理する重要な役割です。

上の図で言うと、2、3、4の役割をviewで行っています。

図を見てもviewは多くの役割を担い、かつ多くのデータや機能と関わりを持ちます。
これはviewが多岐にわたる機能を持っていることの裏返しにもなります。

では、その具体例として、viewの機能をより細かい箇所まで見てみましょう。

viewの機能と使い方

今まででは、viewはURLからページの指定と、モデルから来たデータの編集するなどの役割を持っている例を示してきました。

ここではより細かな機能や役割を見てみます。

viewのより細かな役割について、全て紹介するとキリがないため、一部を抜粋して紹介していきます。

viewで行うことができる機能としては

  • ログイン機能、ログインユーザの判断
  • データベースの編集、データの追加、更新、削除など
  • エラー警告やユーザ通知などのメッセージフレームワーク
  • メールの送信、csv形式などへのデータ出力
  • リダイレクトページの指定
  • HTTPメゾットのGETかPOSTによる条件分岐
  • etc…

など多岐に渡ります。
これを細かく説明していくと本当にキリがないです。

以上の機能だけでも、viewはULRからページを指定し、データを編集するだけではなく

webアプリケーションを使うユーザーと接するための機能の大半を担っています。

上記の機能の一部は、他の記事としてまとめてあります。よければご覧ください。

メッセージフレームワークについて

メール送信について

viewのクラスベースビューと関数ベースビュー

djangoのviewについて、その機能や役割を解説していきました。

ここからはviewの種類についてです。viewには2種類あります。

クラスベースビュー関数ベースのビューです。

この2つについて、簡単に解説します。

関数ベースのビューは、一からコードを書いてdjangoを細かく設定できるようにしたもの
クラスベースのビューはdjangoをより簡単に使ってもらうために、少ないコードで機能を満たすように作られたもの

それぞれで書くコードの量や自由度に多少の差があります。

しかし、この2つは全く同じ機能を持つわけではないですが、公式サイトではクラスベースのビューの方が拡張性が高く柔軟に動くとされてます。

もし、これからdjangoを学ぶならクラスベースビューと学んでもいいですね。

では、それぞれのビューがどのようなものか見ていきます。

関数ベースのビュー

まず、関数ベースのビューを見ていきます。

関数ベースのビューにお決まりとして、2つあります。

最初にdefの後にビュー名をつけて、リクエストを引数に持ってくること

最後に戻り値としてreturnのあとに renderなどをつけて、どのテンプレートやデータを表示するか指定します。

ちなみに、ここで出たリクエストに関しては以下の記事で紹介してあります。

また、関数ベースのビューの戻り値として使用される関数を下記の記事で紹介してあります。

関数ベースのビューの一例を紹介します。

データベースのオブジェクトを一覧として表示させるビューです。

from django.shortcuts import render
from .models import Sample

def lists(request):
    sample_list = Sample.objects.all()
    return render(request, 'lists.html', {'sample_list':sample_list})

modelにSampleモデルがあり、そこからデータをobjects.all()を使用して、引っ張ってきています。

出力はrenderを使用して、lists.htmlのフロントにsample_list変数を渡しています。

これが関数ベースのビューで書くデータベースのオブジェクトを一覧として出力する方法です。

「あー、こんな感じなんだ」と思ってもらえれば問題ないです。

クラスベースのビュー

ではクラスベースのビューを見ていきます。

クラスベースのビューは関数ベースとは異なり、classの後にビュー名をつけて始まります。

関数ベースのビューとは異なり、コードが短く簡単に書けることが、クラスベースのビューの特徴です。

ここでも、関数ベースビューと同じようにデータベースのオブジェクトを一覧として表示させる例を紹介します。

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

class lists(ListView):
    model = Sample

importでgenericからListViewを持ってきます。これが重要です。

そこからclass ビュー名(ListView): でクラスベースのListViewであることを指定します。

そこまでしたら、あとはmodelを指定すれば完了です。

いかがでしょうか?関数ベースのビューを見た後だと、クラスベースのビューが簡単に見えます。

しかし、クラスベースは裏でいろいろと動いているため、何が必要か理解する必要があります。

関数ベースのビューは全て1から書く必要があり、どちらも一長一短ですね。

最後に

以上がviews.pyに関する記述になります。

viewにはさまざまな役割があり、さらにviewにも2種類タイプがありました。

公式ではクラスベースのビューを推奨しています。

この機会にクラスベースビューを学んでみてはいかがでしょうか?

また、django初心者、今djangoの勉強を始めたばかりの方には以下の記事をオススメします。

入門者に向けて、djangoの勉強方法をまとめたものになります。どのような勉強方法があるか見てみてください。

それと、djangoをより勉強したい方にはこちらの記事をオススメします。

タイトルとURLをコピーしました