SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

モダンDjango入門

Python製Webフレームワークの比較とDjangoの環境構築

モダンDjango入門 第1回

  • X ポスト
  • このエントリーをはてなブックマークに追加

Djangoプロジェクトの作成

django-admin startproject

 それでは次回のために、Djangoプロジェクトを用意しておきましょう。これまで作成してきたディレクトリは削除しておいてください。

$ rm -rf mysite mysite2 mysite3 env

 今回作るリポジトリの名前はmodern-djangoとしましょう。これまでやってきたことを踏まえて、Djangoプロジェクトを作成していきます。

$ mkdir modern-django
$ cd modern-django
$ python3 -m venv env
$ source env/bin/activate
(env) $ pip install django
(env) $ django-admin startproject config .

 以下のようなディレクトリ構成になっていればOKです。

modern-django
├── config
├── manage.py
└── env

 Djangoをインストールをしたので、requirements/base.txtにDjango==1.11.6を書き加えておきましょう。

(env) $ mkdir requirements
(env) $ vi requirements/base.txt
(env) $ cat requirements/base.txt
Django==1.11.6

Django Extensions

 今後の開発の効率化のために、Django Extensionsもぜひインストールしておきましょう。Django Extensionsはmanage.pyに便利なコマンドを多数追加してくれます。たとえばshell_plusは、shell起動時に定義済みのモデルや頻繁に使うDjangoの機能を自動的にインポートしてくれます。

(env) $ pip install django-extensions
(env) $ vi requirements/local.txt
(env) $ cat requirements/local.txt
-r base.txt
django-extensions==1.9.1

 Django Extensionsは開発時のみに使うので、requirements/local.txtに記録しておきます。

 Django Extensionsを利用可能とするためには、settingsにあるINSTALLED_APPSへ追加する必要があります。まずはsettings.pyをrequirementsと同様に用途ごとのファイルに分割しましょう。

(env) $ mkdir config/settings/
(env) $ mv config/settings.py config/settings/base.py
(env) $ vi config/settings/local.py
(env) $ cat config/settings/local.py
from .base import *

INSTALLED_APPS += ['django_extensions']

 この状態でpython manage.pyと打つと、"Note that only Django core commands are listed as settings are not properly configured (error: The SECRET_KEY setting must not be empty.)."というエラーが出てしまいます。settingsが正しく設定されていないというメッセージですが、この原因はmanage.pyの6行目にあります。

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")

 本来であればある環境に特化した書き方はよくないのですが、ここはとりあえずconfig.settings.localに書き換えてアプリケーションが動くようにしましょう。

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local")

 次回以降デプロイについて説明する際に、あらためて環境変数を用いるやり方で設定し直すこととします。

 これでpython manage.pyが正常に動くはずです。Django Extensionsのコマンド群が利用できるようになったことを確認してみましょう。先ほど取り上げたshell_plusコマンドを実行してみると、以下のような出力となります。

(env) $ python manage.py shell_plus
# Shell Plus Model Imports
from django.contrib.admin.models import LogEntry
from django.contrib.auth.models import Group, Permission, User
from django.contrib.contenttypes.models import ContentType
from django.contrib.sessions.models import Session
# Shell Plus Django Imports
from django.core.cache import cache
from django.conf import settings
from django.contrib.auth import get_user_model
from django.db import transaction
from django.db.models import Avg, Case, Count, F, Max, Min, Prefetch, Q, Sum, When, Exists, OuterRef, Subquery
from django.utils import timezone
from django.urls import reverse
Python 3.6.3 (v3.6.3:2c5fed86e0, Oct  3 2017, 00:32:08)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)

開発サーバの起動

 それでは最後に、開発サーバを起動するところまでやっておきましょう。Djangoには標準で開発サーバが付属されており、デバッグ出力やリロードなど便利な機能を開発時に利用できます。

 開発サーバの起動にはmanage.py runserverコマンドを使います。

(env) $ 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 16, 2017 - 01:23:15
Django version 1.11.6, using settings 'config.settings.local'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

 マイグレーションが適用されていないというメッセージが表示されていますが、のちほどマイグレーションについて説明するので今はこのままで問題ありません。

 ブラウザからhttp://127.0.0.1:8000/にアクセスすると次の画面が表示されます。

Djangoの初期画面
Djangoの初期画面

Locale設定

 デフォルトでは、Djangoは英語表記となっています。これから作っていくWebアプリケーションは日本対応のみを予定しているので、settings.pyのLANGUAGE_CODEとTIME_ZONEはデフォルト設定から変更しておきましょう。

LANGUAGE_CODE = 'ja'      # デフォルト値: 'en-us'
TIME_ZONE = 'Asia/Tokyo'  # デフォルト値: 'UTC'

 Djangoはファイルの変更を検知すると、開発サーバを自動的にリロードしてくれます。ブラウザに戻って再読み込みすると、英語表記から日本語表記に切り替わるのがわかります。

Djangoの初期画面(日本語)
Djangoの初期画面(日本語)

データベースの設定

 次にデータベースのセットアップを行います。まずはconfig/settings/base.pyにあるデータベースの設定を見てみましょう。

# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

 Djangoのデフォルトでは、データベースにSQLite3を使用するようになっています。ENGINEを変更することで、MySQLやPostgreSQL、Oracle Databaseなども利用できます。NAMEにはSQLite3ファイルのパスが指定されています。

 それではデータベースを用意しましょう。テーブル作成・変更をするためには、マイグレーション機能を使います。manage.py migrateコマンドを実行して、テーブルを作成しましょう。

(env) $ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying sessions.0001_initial... OK

 migrateの実行が成功すると、config配下にdb.sqlite3ファイルが新たに作成されているのが確認できます。ファイルの中を見てみると、認証やマイグレーションに関するテーブルが作成されているのがわかります。

(env) $ sqlite3 config/db.sqlite3
SQLite version 3.16.0 2016-11-04 19:09:39
Enter ".help" for usage hints.
sqlite> .table
auth_group                  auth_user_user_permissions
auth_group_permissions      django_admin_log
auth_permission             django_content_type
auth_user                   django_migrations
auth_user_groups            django_session
sqlite>

管理サイト

 Djangoの大きな特徴のひとつとして、データのCRUD操作を行うための管理サイトが始めから備わっていることが挙げられます。先ほどマイグレーションを実行して管理サイトに必要なテーブルは用意できたので、後は管理サイトへのログイン権限をもつユーザーの作成を行います。

 この特権ユーザーを生成するにもコマンドが用意されています。manage.py createsuperuserを実行して、ユーザー名・メールアドレス・パスワードを入力してください。

(env) $ python manage.py createsuperuser
Username (leave blank to use 'massa142'):
Email address: massa142@example.com
Password:
Password (again):
Superuser created successfully.

 開発サーバを起動後、http://127.0.0.1:8000/adminにアクセスして、作成したユーザーでログインしてみてください。

管理サイト ログイン画面
管理サイト ログイン画面

 ログイン後、次の画面が表示されればOKです。

管理サイト トップ画面
管理サイト トップ画面

 プロジェクトの準備はここまでにしておきます。ここまで解説したソースコードは以下から見ることができます。

終わりに

 初回となる今回は、Djangoの特徴、環境構築、プロジェクト構成について紹介してきました。

 次回はDjango REST frameworkの解説を中心として、実際にアプリケーションの開発をしながら進めていきます。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
モダンDjango入門連載記事一覧

もっと読む

この記事の著者

新井 正貴(アライ マサタカ)

 東京大学文学部卒業、アライドアーキテクツ株式会社にて勤務。2016年4月、株式会社SQUEEZEに入社。コミュニティ活動として、PyCon JP 2015〜 スタッフ、Pythonもくもく会の主催を行う。趣味はラクロスとPerfume。 Site:http://massa142.github.io/ Twitter:@massa142 Facebook:新井 正貴

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10525 2017/11/16 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング