LoginSignup
62
68

More than 5 years have passed since last update.

PythonのWebアプリケーション(Django)を初心者にもわかりやすく解説(4)【ルーティング設定・MTVデザインパターン入門編】

Last updated at Posted at 2016-11-10

解説記事の構成

No. タイトル
1 PythonのWebアプリケーション(Django)を初心者にもわかりやすく解説(1)【環境構築編】
2 PythonのWebアプリケーション(Django)を初心者にもわかりやすく解説(2)【プロジェクト作成編】
3 PythonのWebアプリケーション(Django)を初心者にもわかりやすく解説(3)【アプリケーション作成・DB設定編】
4 PythonのWebアプリケーション(Django)を初心者にもわかりやすく解説(4)【ルーティング設定・MTVデザインパターン入門編】
5 PythonのWebアプリケーション(Django)を初心者にもわかりやすく解説(5)【Django shellでDB操作入門編】
6 PythonのWebアプリケーション(Django)を初心者にもわかりやすく解説(6)【MTVデザインパターン完成編】

開発環境

  • OS: Mac OS Sierra (10.12)
  • Python 3.5.2

Macの環境を前提として話を進めていきます。

Pythonのバージョン確認は以下の通りです。

$ python3 --version
Python 3.5.2

ウェブページの作成

ルーティングの設定

mysite/urls.py にて管理画面(admin)とブログ用にルーティング(URL)の設定を行います。

mysite/urls.py
from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'', include('blog.urls')),
]

admin に関しては、Django admin が自動的に設定してくれていますが、blog に関してはまだ何も作成していないため、設定を行っていきます。

blog/urls.py という空ファイルを作成し、以下のように編集します。

blog/urls.py
from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.post_list),
]

urlpatterns については、Django Girls Tutorial より抜粋します。

これは^$というパターンのURLをpost_listというビューに割り当てたことを意味します。
^$ とは何を意味しているのでしょうか。
それは正規表現のマジックです:)分解してみましょう:

  • 正規表現での^は「文字列の開始」を意味します。ここからパターンマッチを始めます。
  • $は「文字列の終端」を意味していて、ここでパターンマッチを終わります。

この2つの記号を並べたパターンがマッチするのは、そう、空の文字列です。といっても、DjangoのURL名前解決では 'http://127.0.0.1:8000/' は除いてパターンマッチするので、このパターンは 'http://127.0.0.1:8000/' 自体を意味します。つまり、'http://127.0.0.1:8000/' というURLにアクセスしてきたユーザに対してviews.post_listを返すように指定していることになります。

要するに、現状は urlpattern で何も文字列のないURL (ルートディレクトリ)に対して、post_list を割り当てると宣言しています。
post_list のViewはまだ作っていないため、当然アクセスできません。

Djangoのデザインパターン

それでは、設定したURLに対応する表示画面を作っていくのですが、まずDjango内でどのように表示される画面やデータベースが管理されているか知っておく必要があります。

Djangoの話をする前に、代表的なデザインパターンであるMVCを見てみましょう。
MVCを理解しておけば今後の汎用性も高いですし、Djangoで採用されているMTVデザインパターンも簡単に理解できると思います。

Ruby on Railsなどで採用されているMVCデザインパターン

Webアプリケーションでは、よくMVCデザインパターンとして管理されることが多いです。
MVCは Model View Controller の略で、それぞれの役目は以下のようになります。
Ruby on RailsがこのMVCデザインパターンの典型的な例ではないでしょうか。

ユーザーからアクセスした情報をもとに、Controllerが仲介役となって、ModelとViewから必要な情報を引き出し、それらをまとめてユーザーに返すといったイメージです。
すごくざっくりと言うと、ViewがHTMLでModelがDB、Controllerがその管理役です。
そんな定番のMVCデザインパターンは慣れると非常に分かりやすく、そして扱い易いです。

DjangoはMTVデザインパターン

DjangoではMVCではなく、MTVデザインパターンと呼ばれるデザインパターンで管理しているようです。
※ この辺りは宗教争いのようなものでしょうか。

MTVは Model Template View の略称です。

色々と理由はあると思いますが、MVCデザインパターンで良いのに、、、というのが個人的な思いです。
基本的には、MVCとMTVは一対一対応するようなので、頭の中でMVCからMTVへと変換するようにしてください。

MTVの参考記事

Viewの設定

設定されたURLからどのTemplateを読み込むか、Templateにどのような情報を渡すかといった部分を制御しているのがViewです。
※ Ruby on RailsなどのMVCデザインパターンではControllerと呼ばれている部分です。

blog/views.py を作っていきます。

blog/views.py
from django.shortcuts import render

# Create your views here.
def post_list(request):
    return render(request, 'blog/post_list.html', {})

さきほどのURLが post_list というメソッドにアクセスするように設定されていたので、def post_list を定義し、その中で request を引数に取っています。
render メソッドでは、blog/post_list.html というテンプレートファイルを使って、引数で受け取った request の内容を出力しています。
メソッド名とテンプレートファイル名を一致させておけば管理が楽ですね。
※ Ruby on Railsは基本的にメソッド名とテンプレートファイル名が一致することを前提として、render はわざわざ書きません。

Templateの作成

それではテンプレートファイルを作りましょう。
まずTemplate用のディレクトリを作ります。

$ mkdir blog/templates
$ mkdir blog/templates/blog

この中に、post_list.html を作成していきます。

blog/templates/blog/post_list.html
<html>
    <p>Hi there!</p>
    <p>It works!</p>
</html>

これを保存したあとに、http://127.0.0.1:8000/ にアクセスすると、以下の用に、テンプレートが読み込まれて動作します。

スクリーンショット 2016-11-11 3.35.33.png

HTMLの書き方に関しては、他にも参考文献がたくさんあるので、解説はそちらに譲るとします。

これで、URLを設定したオリジナルのテンプレートに対して、ウェブページを表示させることが出来るようになりました。

次回の解説記事

PythonのWebアプリケーション(Django)を初心者にもわかりやすく解説(5)【Django shellでDB操作入門編】

参考文献

おまけ

フォローお待ちしています!

サービス紹介
「数学→プログラミング→Webアプリケーション」まで一気に学べる機械学習のマンツーマン家庭教師サービス「キカガク」に興味のある方はお気軽にご連絡ください。

62
68
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
62
68