LoginSignup
104
133

More than 1 year has passed since last update.

【解説付き】Django チュートリアル その1

Last updated at Posted at 2019-08-15

はじめに

これは、djangoチュートリアルを説明をつけて初学者にわかりやすく学んでいただきたいというためのものです。

対象

  • pythonはなんとなくわかってるけど、djangoを覚えたい
  • 業務でdjango触ってたけど、きちんと理解したい

上記の方々を対象としています。
環境は、Macを使用して進めていきますので、Windowsユーザーの方は、Windows環境に読み替えてついてきていただければと思います。

目次

準備

djangoのチュートリアルは、インストール済みの前提で話が進んでいます。
ここでは、インストールから進めていこうと思います。

pythonのインストール

弊社ではpython2系のプロジェクトも並行して走っている兼ね合いで、pyenvで仮想環境を作成します。
pyenv + virtualenv + pythonのインストールは、こちらのpyenv と pyenv-virtualenv で環境構築を参考にインストールしていただければと思います。
(gitでインストールする方が、バージョンアップや削除したい場合に、扱い安いと思い、私はgitでインストールしています。)

djangoのインストール

djangoはpipコマンドでインストールします。

$ pip install django
Collecting django
  Downloading https://files.pythonhosted.org/packages/d6/57/66997ca6ef17d2d0f0ebcd860bc6778095ffee04077ca8985928175da358/Django-2.2.4-py3-none-any.whl (7.5MB)
     |████████████████████████████████| 7.5MB 5.5MB/s
Collecting sqlparse (from django)
  Using cached https://files.pythonhosted.org/packages/ef/53/900f7d2a54557c6a37886585a91336520e5539e3ae2423ff1102daf4f3a7/sqlparse-0.3.0-py2.py3-none-any.whl
Collecting pytz (from django)
  Downloading https://files.pythonhosted.org/packages/87/76/46d697698a143e05f77bec5a526bf4e56a0be61d63425b68f4ba553b51f2/pytz-2019.2-py2.py3-none-any.whl (508kB)
     |████████████████████████████████| 512kB 37.4MB/s
Installing collected packages: sqlparse, pytz, django
Successfully installed django-2.2.4 pytz-2019.2 sqlparse-0.3.0

インストール後の確認

$ pip freeze
Django==2.2.4
pytz==2019.2
sqlparse==0.3.0

MySQLのインストール

弊社ではGCPを使っていることから、MySQLのバージョンは5.7を使用しています。
MacにMySQL5.7のインストール手順は、こちらの[mac] Homebrewを使ってMySQL5.7をインストールして初期設定を参考にインストールしてください。

1.プロジェクトを作成する

上記でインストールしたdjangoを使って、プロジェクトの基本セットを作成していきます。

$ django-admin startproject mysite

このコマンドは、
先ほどインストールした、djangoコマンド(django-admin)を使って
プロジェクトを作成するよ(startproject)
プロジェクト名はmysiteだよ
という意味になります。
※django-adminコマンドはプロジェクト作成時くらいしか登場しません。

作成されたディレクトリは、こんな感じになっています。
スクリーンショット 2019-08-14 2.55.18.png

mysite

django-admin startproject mysiteで指定した、mysiteディレクトリの中に、ファイルが生成されます。
この名前は、プロジェクト名となります。

manage.py

Django プロジェクトに対する様々な操作を行うためのコマンドラインユーティリティです。
プロジェクト作成後は、django-adminではなく、manageコマンドを使っていきます。

mysite/mysite

mysiteプロジェクトのmysiteパッケージとなります。
呼び出す時に、 import mysite.urls のように指定できるようになります。
(ただし、__init__.pyファイルがないとパッケージとして認識されないので注意です)

mysite/mysite/__init__.py

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

mysite/mysite/settings.py

Django プロジェクトの設定ファイルです。

mysite/mysite/urls.py

URLの構造を定義するところです。
URLとViewの対応をここで定義します。

mysite/wsgi.py

プロジェクトを起動するためのWSGI互換Webサーバーとのエントリーポイントです。
こちらの詳細は、今回は割愛します。

#2. 開発用サーバー

ローカルで起動

manage.pyが配置されているディレクトリで、下記コマンドを実行すると、
簡易サーバが起動します。

$ python manage.py runserver

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 17 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.

August 14, 2019 - 05:21:51
Django version 2.2.4, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

この状態で、ブラウザで http://127.0.0.1:8000/ にアクセスすると下のような画面になれば、成功です!

django_local2.gif

ポートについて

URLhttp://127.0.0.1:8000/に含まれる8000はポート番号になります。

ポートとは、通信する時に通るドアみたいなものです。

ポート番号は0-65535番までがあり、大半は既に割り当てられています。wiki参照

例えば、
ブラウザで、http://xxxxx.comのようにアクセスするときは、80番を通過します。

https://xxxxx.comのように、httpsだと443番を通過します。

同時に、djangoのプログラムを並行起動させたり、
他のプログラムと同時起動させる場合など、ポート番号を変更したい場合があります。

8080番として起動したい場合は、下記のようになります。

$ python manage.py runserver 8080

また、IPを指定してアクセスしたい場合、下記のコマンドでローカルIPでアクセスできるようになります。

$ python manage.py runserver 0:8000

0:80000 は、 0.0.0.0 のショートカットなので、0.0.0.0でも同義です。

runserverは自動的にリロードされます。
コードを修正した場合は、自動的にリロードされるため、再起動の必要はありません。
(エラーが発生した場合など、再起動が必要になる場合もあります)

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

Polls アプリケーションをつくる

djangoの開発を行う準備が整いました。
チュートリアルに従い、Pollsアプリケーションを作ってみましょう。

manage.py と同じディレクトリに入って、下記のコマンドを実行してみましょう

$ python manage.py startapp polls

polls というパッケージと初期セットが作成されます。

スクリーンショット 2019-08-15 16.33.58.png

viewを作成する

polls/views.py を開いて、以下の Python コードを書いてください

polls/views.py
from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

このViewは、"Hello, world. You're at the polls index."とだけ、レスポンス(出力)するViewとなります。

urlsを作成する

Viewを実行するには、URLに対応づけする必要があります。
URLを定義するために、polls/urls.pyを作成します。

スクリーンショット 2019-08-15 16.33.58.png

polls/urls.py
from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

urlpatterns に、
''(指定なし)でアクセスされると、先ほど作ったviewsのindexを呼ぶ
という定義になります。
指定なしについては、後ほど説明します。

上記で作成したURLの定義を、ルートのURLconfに組み込みます。
mysite/urls.pydjango.urlsのimportにincludeを追加します。
urlpatterns のリストに pollsとしてinclude('polls.urls')('polls.urls'で、polls/urls.pyを意味します)を挿入します。

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

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

ここまでの設定で、ローカルサーバを起動します。

$ python manage.py runserver

ブラウザで、http://127.0.0.1:8000/polls/ にアクセスすると、polls/views.pyindexが呼ばれ、

"Hello, world. You're at the polls index."とレスポンスされます。

スクリーンショット 2019-08-15 17.42.56.png

上記の''(指定なし)は、polls/以降に何も指定しないと言う意味です。
polls/indexのように、indexを必要とする場合には、
path('index', views.index, name='index'),
となります。

path関数について

path() 関数は4つの引数を受け取ります。引数のうち route と view の2つは必須で、kwargs、name の2つは省略可能です。


route

route は URL パターンを含む文字列です。リクエストを処理するとき、Django は urlpatterns のはじめのパターンから開始し、リストを順に下に見ていきます。
リクエストされた URL を一致するものを見つけるまで各パターンと比較します。


view

Django がマッチする正規表現を見つけると、 Django は指定されたview関数を呼び出します。


kwargs

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


name

URL に名前付けをしておけば処理中に参照しやすく(扱いやすく)なります。
とくにテンプレートの中で有効です。

まとめ

ここまでがdjango チュートリアル その1でした。

既にdjangoに触れてる人や、多言語に詳しい人ならわかるけど、初めての人にはわかりにくい部分が多いと思います。
本家のチュートリアルに補足情報を盛り込んだ形で記載しているので理解の手助けになれれば幸いです。

まずは触れてみる事から初めて、徐々に慣れていくと良いかと思います。

チュートリアルやドキュメントは、辞書みたいに詰まったり困った時に、見返してみると理解が徐々に深まるので、初めての人は軽く読み進めるくらいのモチベーションで読んでみてください。

次は、はじめての Django アプリ作成、その2 -前編-に読み進めてもらえると幸いです。


[PR] [![長方形-システム開発002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38197/36301a76-6238-c8f4-1cb8-691642889ca0.png)](https://www.co.task.site?pr=qiita)
104
133
1

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
104
133