スライドショースライドショー

【Django入門】viewsを使ってページを表示させよう

今回は、PythonのDjangoで使われるviewの書き方、使い方について解説します。

viewだけではなく、MTVモデルについても併せて学んでいきましょう。

この記事では、

・MTVモデルとは何か
・viewとは何か

について解説します。さらに、

・view関数、viewクラスについて
・クラスベース汎用ビューの使い方

についての解説を通して、複雑なviewに対しての知識も深めていきましょう。

MTVモデルとは

今回学ぶviewの前に、まずはMTVモデルと呼ばれる設計思想について学んでいきましょう。

DjangoはMTVモデルを採用しています。

MTVとは、

・Model(データベースに格納されているデータ)
・Template(テンプレートファイルによって定義されたそれぞれのページのデザイン)
・View(どのページを表示させるかを決定する処理)

の頭文字を取ったものです。

図にしてみるとこのようになります。

よく似た設計にMVC(Model、View、Controller)というモデルもあります。

MVCモデルの場合は、

・Model(データベースに格納されているデータ)
・View(ページをどのように見せるのかを決定する処理)
・Controller(ユーザーからの入力をModelに伝える処理)

になります。

MVCモデルを採用しているフレームワークには、Ruby on Railsがあります。

viewとは

これから学んでいくviewは具体的にどのような役割をするのか、見ていきましょう。

viewではどのページを表示するかを決定する処理をしています。

具体的には送られてきたリクエストをもとに、どのページを表示させるかの決定をしています。

関数で実装されているviewや、クラスで実装されているviewもあります。

一緒にviewに触れてみましょう!

view関数の使い方

ここからは実際にview関数を書いて、動作をさせてみます。

Djangoのインストール方法

まずはDjangoをインストールしましょう。

Djangoはパッケージとして提供されています。

インストール方法はこちらの記事をご覧ください。

【Django入門】あなたのパソコンにDjangoをインストール!
更新日 : 2019年1月29日

プロジェクトとアプリケーションの作成

インストールが出来たら、次はプロジェクトアプリケーションを作成していきます。

詳しくはこちらの記事で解説されているのでご覧下さい。

【Django入門】Djangoアプリの設計哲学!MTVモデルをmodelsを通して学ぼう!
更新日 : 2019年1月29日

簡単なview関数の作成

プロジェクトとWebアプリケーションのテンプレートまでは出来ましたか?

myappディレクトリに入ると、views.pyというファイルがあります。

これが、MTVモデルのViewを司る今回の肝となる部分です。

views.pyにこのような記述をしましょう。

from django.http import HttpResponse
 
def index(request):
    return HttpResponse("Hello, world.")

indexという関数名で引数にrequestを受け取り、「Hello,World.」というHTTPレスポンスを返します。

HTTPレスポンスとは、ページなどに関するサーバーからの返信と考えて良いでしょう。

しかし、これだけではまだ動きません。

views.pyと、URLを紐付けする必要があります。

urlpatternsを使ってurls.pyに設定を追加

先程はviews.pyにindex関数を追加しました。

しかし、views.pyを編集するだけではアクセスすることができません。

viewを呼ぶために、urls.pyというファイルを作って紐付けをする必要があります。

これは自動で生成されないので、views.pyと同じディレクトリに自分で作りましょう。

そしてこのように編集します。

from django.conf.urls import url
from . import views
 
urlpatterns = [
    url(r'^$', views.index, name='index'),
]

views.pyに追加したindex関数を、urls.pyに紐付けします。

今編集したurls.pyは、myapp/urls.pyでしたが、mySite/urls.pyも編集する必要があります。

このコードをmySite/urls.pyに書きましょう。

from django.conf.urls import include, url
from django.contrib import admin
 
urlpatterns = [
    url(r'^myapp/', include('myapp.urls')),
    url(r'^admin/', admin.site.urls),
]

これで、すべての準備は完了です。

ターミナルでmySiteディレクトリに入り、このコマンドを実行しましょう。

from django.conf.urls import include, url
from django.contrib import admin
 
urlpatterns = [
    url(r'^myapp/', include('myapp.urls')),
    url(r'^admin/', admin.site.urls),
]

これで、すべての準備は完了です。

ターミナルでmySiteディレクトリに入り、このコマンドを実行しましょう。

python manage.py runserver

これで、 http://127.0.0.1:8000/ にブラウザでアクセスするとサーバーが起動していることがわかると思います。

さらに、http://127.0.0.1:8000/myapp にアクセスすると、views.pyのHTTPレスポンスで指定したHello, World.が表示されます。

これですべての紐付けが出来ました。

viewクラスの使い方

viewには関数だけではなくクラスも使うことができます。

リクエストがシンプルなものであれば関数でも構いません。

しかし、関数を使う場合、リクエストによって処理を変える場合はif文を使って多くの分岐を書かなければなりません。

そこで、viewクラスを使うことによってviews.pyに書く量を減らすことができます。

現在は関数のviewよりもクラスのviewが一般的になっているのでぜひ覚えておきましょう。

また、クラスで使われる継承などについてはこちらの記事をご覧ください。

【Python入門】クラスの使い方を簡単解説で楽々マスター
更新日 : 2019年7月31日

簡単なviewクラスの作成

ここで、viewクラスを使ったviews.pyを書いてみましょう。

from django.views.generic import TemplateView
 
class IndexTemplateView(TemplateView):
    template_name = "index.html"

すでにDjangoに用意されているTemplateViewというクラスから継承して、独自のメソッドを書いています。

メソッドはありませんが、プロパティでtemplate_nameを指定しています。

urls.pyも同時に変更しましょう。

from django.conf.urls import url
from django.contrib import admin
from myapp.views import IndexTemplateView
 
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^myapp/', IndexTemplateView.as_view()),
]

クラスベースのViewを使う時はas_view()メソッドを使うことを覚えておきましょう。

これで、テンプレートとviewクラスを使ってページを表示させることができました。

クラスベース汎用ビューの応用

クラスを利用したviews.pyについてわかったところで、応用について学んでいきましょう!

TemplateViewで変数を使う方法

今まではHttpResponseで返した「Hello,World.」という文字列しか返すことができませんでした。

しかしテンプレート変数を利用することで、データベースに格納されているものを表示することができます。

ここではデータベースには触れず、変数が使えることの確認をしたいと思います。

from django.views.generic import TemplateView
 
class SampleTemplate(TemplateView):
    template_name = "index.html"
 
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["title"] = "MyPage"
        return context

このようにviews.pyを編集をします。

contextという変数には、継承元のメソッドを呼び出しています。

これで、index.htmlというファイルにこのような編集をします。

<html>
<head>
<title>django view test</title>
</head>
<body>
<p>{{title}}</p>
</body>
</html>

これで、titleという変数がindex.htmlに書き加えられました。

これはtemplateファイルとも呼ばれるものです。

詳しくはこちらの記事をご覧ください。

【Django入門】templateとHTMLを使ってWebページを表示しよう
更新日 : 2019年9月6日

views.pyではtitleという変数にMyPageが入っているので、ページが表示されるとMyPageという文字が表示されます。

まとめ

MTVモデルのひとつを担う大切なViewについて、学習してきました。

views.pyの書き方や、urls.pyがどのような働きをするかについて、覚えておきましょう。

また、Djnagoを扱う上でこれらの内容は基本的な部分になります。

クラスベース汎用ビューは中でも大切な部分になるので、しっかりと身につけておきましょう!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ryo

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説