【簡単】Django Viewの基本|関数とクラスの違いとは?

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2022年8月)

✔このような方へ向けて書かれた記事となります

「DjangoのViewってどんな役割なの?」

「View関数とViewクラスについて詳しく知りたい」

「Viewクラスを使った実例が見たい!」

✔当記事を通じてお伝えすること

  • Django Viewの役割とは
  • View関数とViewクラスについて
  • View関数とViewクラスの実例

当記事を最後までご覧いただければ、DjangoのViewが何なのかがわかるのはもちろん、View関数とViewクラスの違いや基本的な書き方までマスターできます。

ぜひ最後までご覧ください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

DjangoにおけるViewの役割

DjangoにおけるViewの役割は、以下のものがあげられます。

  • テンプレートを指定する
  • テンプレート上にデータを表示する
  • データベースからデータを取り出す
  • データベースにデータを登録する
  • データベースのデータを編集する

DjangoのMTV構成の中で、「V」がViewです。

より詳しくViewを理解いただくために以下の2点をお伝えしていきます。

  1. Viewの機能
  2. Viewの使い方

それぞれ見ていきましょう。

Viewの機能

Viewは、テンプレートとデータベースの間に入り、データの表示や編集などをおこないます。

Viewの主な機能は以下のとおりです。

  • データの登録や追加、編集、削除
  • ログイン機能
  • エラーの警告などで使用するメッセージフレームワーク

ユーザーの目に触れるテンプレートと裏方のデータベースのやり取りを、間に入って手伝う役割を担っています。

ブラウザからデータを編集したり、データを新規に追加したりする際に活躍します。

Viewの使い方

Viewの使い方を理解するためには以下の3つをおさえましょう。

  1. Viewは、views.py内で記述すること
  2. views.pyの中で、関数もしくはクラスを定義すること
  3. 定義した関数もしくはクラスを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クラスに移行するのが良いでしょう。

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