(最終更新月:2022年8月)
✔このような方へ向けて書かれた記事となります
「DjangoのViewってどんな役割なの?」
「View関数とViewクラスについて詳しく知りたい」
「Viewクラスを使った実例が見たい!」
✔当記事を通じてお伝えすること
- Django Viewの役割とは
- View関数とViewクラスについて
- View関数とViewクラスの実例
当記事を最後までご覧いただければ、DjangoのViewが何なのかがわかるのはもちろん、View関数とViewクラスの違いや基本的な書き方までマスターできます。
ぜひ最後までご覧ください。
DjangoにおけるViewの役割
DjangoにおけるViewの役割は、以下のものがあげられます。
- テンプレートを指定する
- テンプレート上にデータを表示する
- データベースからデータを取り出す
- データベースにデータを登録する
- データベースのデータを編集する
DjangoのMTV構成の中で、「V」がViewです。
より詳しくViewを理解いただくために以下の2点をお伝えしていきます。
- Viewの機能
- Viewの使い方
それぞれ見ていきましょう。
Viewの機能
Viewは、テンプレートとデータベースの間に入り、データの表示や編集などをおこないます。
Viewの主な機能は以下のとおりです。
- データの登録や追加、編集、削除
- ログイン機能
- エラーの警告などで使用するメッセージフレームワーク
ユーザーの目に触れるテンプレートと裏方のデータベースのやり取りを、間に入って手伝う役割を担っています。
ブラウザからデータを編集したり、データを新規に追加したりする際に活躍します。
Viewの使い方
Viewの使い方を理解するためには以下の3つをおさえましょう。
- Viewは、views.py内で記述すること
- views.pyの中で、関数もしくはクラスを定義すること
- 定義した関数もしくはクラスをurls.pyでURLと紐づけること
流れさえつかめばあとは、関数とクラスの書き方を覚えればOKです。
次章以降で、関数とクラスについて深堀りしていきます。
View関数とViewクラス
DjangoのViewは、Pythonの関数もしくはクラスを使い、記述します。
まずは関数とクラスの違いを理解いただいたうえで、それぞれの特徴を解説していきます。
ひとつずつ見ていきましょう。
View関数とViewクラスの違い
View関数とViewクラスの違いは以下のとおりです。
項目 | View関数 | Viewクラス |
---|---|---|
コード量 | 多 | 中 |
わかりやすさ | 中 | 高 |
柔軟性 | 高 | 中 ※高:さまざまなメソッドを理解すれば柔軟性は高まります |
難易度 | 中 | 高 |
Viewクラスは多少難易度が高いですが、コード量やわかりやすさの面で有利になります。
ただしView関数も、Djangoがどのように処理をしているのかを学ぶうえで大切です。
比較しながら学習し、実際のコードはViewクラスで書いていくのが良いといえます。
View関数の特徴
View関数を使うことで、DjangoにおけるViewの仕組みを覚えられます。
一から処理を記述するため、コードが多くなりがちですが、その分仕組みがわからなければ書けないからです。
Django初学者の方は、まずはView関数で基本的なことを覚えると良いでしょう。
Viewクラスの特徴
Viewクラスは、アプリ開発において主流で使われる方法です。
なぜならさまざまな属性やメソッドが組み込まれており、コードが短く済むからです。
書き方に決まりがあり、最初は窮屈に感じるかもしれませんが、覚えてしまえば難しくはありません。
View関数で最低限の仕組みを覚えたら、Viewクラスを徹底的に覚えていきましょう。
View関数の作り方・実例
こちらでは具体的にView関数の作り方や覚えるべきメソッドをご紹介していきます。
Django初学者の方は、簡単なViewが作れるようになるまで、View関数を学ぶことをおすすめします。
View関数を作る
View関数のテンプレートとしては、以下のようになります。
def 関数名(request):
#処理
return render(request, テンプレート名, コンテキスト)
ポイントとして6つおさえましょう。
- 引数で「request」を受け取る
- 最後は「return」で値を返す
- 返す値は、renderやredirectメソッドを使う
- renderの引数で、request, テンプレート名, コンテキストの順番で値を渡す
- テンプレート名は、テンプレートフォルダ以下のファイルパスとする
- コンテキストはPythonの辞書型オブジェクトで、{変数名: 実際の値}となる
コンテキストについてはこちらで詳しく解説しています。
ポイントをおさえたうえで、具体例をご覧ください。
View関数の実例コードを紹介
例としては以下のとおりです。
def myview(request):
return render(request, "index.html", {"data": "コンテキストデータ"})
テンプレート名とコンテキストは事前に以下のように変数に格納するのもおすすめです。
def myview(request):
template_name = "index.html"
ctx = {"data": "コンテキストデータ"}
return render(request, template_name, ctx)
実際にいろいろなページを作ってみたい方に向けて、以下のページで丁寧に解説しています。
URLと紐付ける方法
作成したView関数をURLと紐付けなければブラウザからアクセスできません。
前章で作成したView関数を紐付けるには、以下のようにします。
from django.urls import path
from .views import myview
urlpatterns = [
path('my-view/', myview),
]
詳しくはこちらのチュートリアル記事がおすすめです。
View関数で覚えておきたいメソッド
View関数でよく使うメソッドをご紹介します。
覚えておくことで、応用がきくようになり、いろいろなページを作れるようになるでしょう。
- render
- redirect
- get_object_or_404
renderメソッド
renderメソッドは、ページを表示するためのレスポンスを作り出すショートカットメソッドです。
使用する前には必ずインポートが必要です。
import django.shortcuts import render
redirectメソッド
redirectメソッドは、指定のページにアクセスした際に、リダイレクトを指示するためのメソッドです。
使用する前には以下のようにインポートしましょう。
from django.shortcuts import redirect
詳しくはこちらをご覧ください。
get_object_or_404メソッド
get_object_or_404は今までの返り値のためのものではなく、データベースからデータを取得するためのメソッドになります。
データを取り出す際に、データが存在しないと自動的に404エラーを出してくれるものになります。
データベースとの連携をする際に良く使われます。
詳しくは以下の記事でご覧ください。
Viewクラスの作り方・実例
こちらではViewクラスの書き方と実例をご紹介します。
Viewクラスに関する知識は、View関数以上に有効なものです。
ぜひ概要をここで理解しておきましょう。
Viewクラスで覚えておきたい種類
Viewクラスを使いこなすためには、既存のクラスを理解しておく必要があります。
なぜなら全てのViewクラスには、継承元があるからです。
主なものは以下になります。
- TemplateView
- RedirectView
- ListView
- DetailView
- CreateView
- UpdateView
- FormView
以下の記事でいくつかご紹介しています。
Viewクラスを作る
Viewクラスの作り方を解説します。
どのクラスでも共通しているものは以下のとおりです。
#継承元クラスのインポート
#モデルクラス名のインポート(必要な場合のみ)
class クラス名(継承元クラス):
template_name = テンプレート名
model = モデルクラス名(TemplateViewやRedirectViewでは不要)
以上です。
レスポンスを返す必要がないのが特徴です。
具体例もご覧ください。
Viweクラスの実例コードを紹介
簡単なものはTemplateViewです。
from django.views.generic import TemplateView
class MyTemplateView(TemplateView):
template_name = "index.html"
template_nameを指定するだけで、自動的にテンプレートとの紐づけが完了します。
URLと紐付ける方法
作成したViewクラスをURLと紐付けなければブラウザからアクセスできません。
前章で作成したViewクラスを紐付けるには、以下のようにします。
from django.urls import path
from .views import MyTemplateView
urlpatterns = [
path('my-view/', MyTemplateView.as_view()),
]
ポイントは、クラスに備わっている「as_view」メソッドを使うことです。
クラス名.as_view()
詳しくはこちらのチュートリアル記事がおすすめです。
Viewクラスで使えるメソッド3選
Viewクラスでよく使うメソッドを3つご紹介します。
- get_context_data
- get_queryset
- get_object
get_context_data
get_context_dataは、コンテキストを追加・編集するためのメソッドです。
以下のように使います。
from django.views.generic import TemplateView
class MyTemplateView(TemplateView):
template_name = "index.html"
def get_context_data(self, *args, **kwargs):
ctx = super().get_context_data(*args, **kwargs)
ctx["new_context"] = "new data"
return ctx
継承元のメソッドを引き継ぐことを忘れないようにしましょう。
get_queryset
get_querysetは、ListViewなどで使われるデータ一覧を取得するメソッドです。
返された値は、自動的に「object_list」という変数に格納されるので、テンプレートで展開することができます。
コード例は以下のとおりです。
from django.views.generic import ListView
from .models import MyModel
class MyListView(ListView):
template_name = "index.html"
def get_queryset(self):
return MyModel.objects.all()
詳しくは、ListViewを学びましょう。
get_object
get_objectメソッドは、DetailViewやUpdateViewで使われる単一のデータを取得するためのメソッドです。
返された値は自動的に、「object」という変数に格納され、テンプレート上で使用できます。
コード例は以下のとおり。
from django.shortcuts import get_object_or_404
from django.views.generic import DetailView
from .models import MyModel
class MyDetailView(DetailView):
template_name = "index.html"
def get_object(self):
return get_object_or_404(MyModel, pk=1)
詳しくはこちらをご覧ください。
まとめ:Viewでは関数もクラスもどちらも使いこなせると便利
当記事の内容をまとめます。
- Viewとは、テンプレートとデータベースの間の処理を担当している
- Viewには関数とクラスで記述する2種類ある
- Viewクラスをメインで覚えるのがおすすめ
View関数は自由に書けるので、初めての方にはおすすめです。
まずは仕組みを覚えたうえで、Viewクラスに移行するのが良いでしょう。