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

Django

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

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

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

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

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

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

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

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

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

【著者プロフィール】

profile_icon
【Python歴】11年 x 【Django歴】10年
HP作成、社内システムの構築、コンサルティング

当ブログを通じて、Webアプリの書き方やアプリの公開方法までを解説しています。

☆日報アプリ「D-Repo」(デモ版)→こちら

※Djangoをベースに作成したアプリです。

☆便利ツールアプリ「Tool Station」→こちら

※Django REST frameworkとReactで作成しているアプリです。

月9,800円でWebデザインが学べる

デザナルは、Webデザインに苦手意識がある方におすすめのサブスク型スクールです。

なぜなら安い以外にも以下のような特徴があるからです。

  • 初期費用不要
  • 教材が使い放題
  • 案件で収入も得られる

デザナルは稼ぎながら学べる、格安の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クラスに移行するのが良いでしょう。

当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています

「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」

という方は必見です!

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

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