Django

Djangoを始めよう! 〜チュートリアル①〜

More than 1 year has passed since last update.


概要

前回の続きです。

今回は、Pythonの中で一番人気のWebアプリフレームワーク「Django」のチュートリアルを一通りやりたいと思います。

やっぱり、フレームワーク入門は本家のチュートリアルに限ると思います。

ラッキーな事に、Djangoでは日本語翻訳のチュートリアルも存在しました。

django-logo.jpg

チュートリアルでは、投票(poll)アプリの様なものを作成しています。

簡単な要件としては、以下となります。


  • ユーザが投票したり結果を表示したりできる公開用サイト

  • 投票項目の追加、変更、削除を行うための管理 (admin) サイト


Pythonのフレームワーク

Pythonフレームワークには「Django」を選びました。

理由は以下の様な理由です。


  • Djangoの拡張フレームワークとして、djangorestframeworkというRESTfulAPIを制作するのに特化したものがあった。


    • React + Djangoが実現できそう。



  • PythonのWebアプリフレームワークでは一番人気な為、日本語の参考資料などが多い。

  • AWS関連のDjango専用モジュールがたくさんあった。

他の候補では、「Bottle」や「Flask」や「Tornado」なども人気が出てきているみたいでしたが、Pythonという大きな概要を掴むためにも、一番人気のフレームワークから入門したいと思います。


環境

前回までの文法編では、Python2.x系を使ったので、今回は3.x系で進めたいと思います。

項目
内容

OS
MacOS X

Python
v3.5.2

Django
v1.10.2


Djangoのインストール

以下のコマンドでDjangoをインストールします。


terminal

$ pip install django


以下のコマンドでインストールとバージョンを確認します。


terminal

$ python -m django --version

>>>1.10.2


プロジェクトを作成する

Djangoでは、プロジェクトを作成する為のコマンドが準備されています。

今回は、 mysite という、チュートリアルと同じプロジェクトを作成します。


terminal

$ django-admin startproject mysite



Djangoのプロジェクトの概念

プロジェクトとは、データベースの設定やDjango固有のオプション、アプリケーション固有の設定などといった、個々のDjangoインスタンスの設定を集めたものです。


startprojectで作成されたファイル

startprojectを実行すると、以下の様なディレクトリが作成されます。

mysite/

manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py


外側のmysite

外側の mysite/ ルートディレクトリは、このプロジェクトのただの入れ物です。 この名前はDjangoに関係しませんので、好きな名前に変更できます。


manage.py

Django プロジェクトに対する様々な操作を行うためのコマンドラインユーティリティです。


内側のmysiteディレクトリ

このプロジェクトの本当のPythonパッケージです。この名前が Python パッケージの名前であり、 importの際に 使用する名前です (例えば import mysite.urls) 。


mysite/init.py

このディレクトリがPythonパッケージであることをPythonに知らせるための空のファイルです。


mysite/settings.py

Django プロジェクトの URL 宣言、いうなれば Django サイトにおける「目次」に相当します。


mysite/wsgi.py

プロジェクトをサーブするためのWSGI互換Webサーバーとのエントリーポイントです。

各々のファイルは実際に修正する際に、再度詳しく説明したいと思います。


開発用サーバー

Djangoでは予め簡易的なWebサーバ準備してくれています。

以下のコマンドで開発用サーバを起動できます。


terminal

$ python manage.py runserver

>>>
Performing system checks...

System check identified no issues (0 silenced).

You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

October 10, 2016 - 16:28:45
Django version 1.10.2, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.


マイグレーション関連でエラーを吐きますが、現状は無視でOKです。

実際ブラウザで確認しています。

localhost:8000をブラウジングすると以下になるはずです。

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

It worked!が表示されていれば、無事簡易サーバが立ち上がっています。

(今は英語ですが、日本語に変更可能です。)

(ポート番号も変更可能です。)


アプリケーションを作成する

今回はチュートリアル通り投票アプリを作っていきたいと思います。


プロジェクトとアプリケーションの違い

一つのプロジェクトには複数のアプリケーションを入れられます。また、一つのアプリケーションは複数のプロジェクトで使えます。


プロジェクト

プロジェクトとは、あるウェブサイト向けに「設定」と「アプリケーション」を集めたものです。


アプリケーション

アプリケーションとは、実際に何らかの処理を行うWebアプリケーションを指します。(機能と表現していいかもしれません)

例えばブログシステムや公開レコードのデータベース、単純な投票アプリといった具合です。


アプリケーションの作成コマンド

以下のコマンドで新規アプリケーションを作成できます。

今回は、投票(poll)のアプリケーションを作ります。

$ python manage.py startapp polls


ビューの作成

各アプリケーションに作成された、views.pyにビューを制作していきます。

今回はrequestを受けて、responseを返す簡単なビューを作成しています。


mysite/poll/views.py

from django.shortcuts import render

from django.http import HttpResponse

def index(request):
return HttpResponse('Hello World from Polls')



URLの対応付け


pollsのURLconfを作成する

ビューを呼ぶためには、URLの対応付けをする必要があります。

URLconfが必要となります。

pollsディレクトリにURLconfを作るために、 urls.py というファイルを作ります。


ルートのURLにpollsを対応させる

次のステップはルートのURLconfにpolls.urls モジュールの記述を反映させることです。

ルートのURLconfを以下の様に修正します。


mysite/mysite/urls.py

from django.conf.urls import url, include

from django.contrib import admin

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



ルーティングが制御できているかを確認する

実際に、サーバを起動して、localhsot/pollsでアクセスできるか試して見ましょう。

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

上の様に文字が表示されていたらルーティング成功です。


url関数

url() 関数は4つの引数を受け取り、そのうち2つが必須です。

regex と view 、オプションで kwargs と name です。ここで引数が何のためにあるものかを見ておきましょう。


引数


regex(regular expression)

第1引数では、正規表現でURLパターンを指定します。

この引数は必須です。


view

Django がマッチする正規表現を見つけると、 Django は所定のビュー関数を呼び出します。その際は HttpRequest オブジェクトを第一引数に、その他、正規表現から「キャプチャされた」値を他の引数に関数を呼び出します。

この引数は必須です。


kwards

任意のキーワード引数を辞書として対象のビューに渡せます。この機能はチュートリアルでは使いません。

この引数はオプションです。


name

URL に名前付けをしておけば Django のどこからでも明確に参照でき、とくにテンプレートの中で有効です。この便利な機能のおかげで、プロジェクトのURLにグローバルな変更を加える場合にも1つのファイルを変更するだけで済むようになります。


まとめ

チュートリアルの第1章はここまでです。

開発環境の構築から、プロジェクト、アプリケーションの作成と、

単純なビューの表示と、URLconfの設定を見てきました。

次回は、DBとの連携と、もう少し複雑なテンプレートを利用したビューの表示をしたいと思います。


シリーズ