この記事でお伝えすること
- 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をより勉強したい方にはこちらの記事をオススメします。