Help us understand the problem. What is going on with this article?

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との連携と、もう少し複雑なテンプレートを利用したビューの表示をしたいと思います。

シリーズ

tfrcm
React / ReactNative / Go / TypeScript / AWS / Docker / k8s
https://gemcook.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした