日々精進

aikoと旅行とプログラミング

DjangoでWebアプリを作りたい【第1回 開発環境の構築】

DjangoPythonで作られているWebアプリケーションフレームワーク。使いたいなぁと思って日がたってしまったのでそろそろはじめていきたいと思い書き始めました。DjangoはDRY(Don't Repeat Yourself, 重複を減らそう)の精神で作られているそう。特徴は様々あるそうですが…Pythonの勉強も兼ねてDjangoでなにか作っていきたいというわけです。それではいってみましょう。基本的に本家チュートリアルに沿ってブログを書いていきます。今回は開発環境の構築です。間違っているところがあったら是非教えて下さい。

開発環境

pythonのインストール
$ brew install python3
$ python3 -V
Python 3.4.1
virtualenv, virtualenvwrapperのインストール
$ sudo easy_install pip
$ sudo pip install virtualenv virtualenvwrapper

python2, python3の両方に対応したものがインストールされる。

virtualenv, virtualenvwrapperの有効化

1. 仮想環境の一元管理を行うディレクトリの作成

$ cd ~
$ mkdir .vritualenvs

2. シェルの設定ファイル(bashなら~/.bashrc, zshなら~/.zshrc)に以下を記述

export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

設定ファイルがない場合は作成してください。
3. ~/.***_profileに以下を記述

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

4. .***_profileの再読み込み

$ source ~/.***_profile

仮想環境の構築

$mkvirtualenv --no-site-package --python /usr/local/bin/python3 env1

mkvirtualenvはその名の通り仮想環境の作成。--no-site-packageはsite-packageを受け継がない。--pythonpythonのバージョンを指定することができる。

その他コマンド

$ workon env1    //仮想環境への移動
$ deactivate        //仮想環境を無効にする
$ rmvirtualenv    //環境の削除

Djangoのインストール

$ workon env1
$ pip install Django==1.9

今回はDjango1.7.1をインストールします。

$ pip freeze -l
Django==1.9

と出ていたら成功です。

プロジェクトの作成

$ workon env1
$ mkdir ~/Document/workspace
$ cd ~/Document/workspace

プロジェクトを格納するディレクトリを作成し移動します。
そしてmysiteというプロジェクトを作成します。

$ django-admin.py startproject mysite

すると以下の様なファイルが生成されます。

.
└── mysite
    ├── manage.py
    └── mysite
        ├── __init__.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py
  • 一番上位のmysite/はただの入れ物で、自由にリネームすることができる。
  • manage.pyは様々な操作を行うためのコマンドラインツール
  • 内側のmysiteは実際のPythonパッケージである。これがパッケージ名であり、インポートを行う際などに使われる(e.g. mysite.urls)
  • mysite/init.pyはこのディレクトリがPythonパッケージであることを示すためのファイルである。
  • mysite/settings.pyはDjangoプロジェクトの設定ファイル。
  • mysite/urls.pyはDjangoプロジェクトのURL宣言、所謂目次のようなものである。
  • mysite/wsgi.pyはWSGI互換のあるWebサーバでプロジェクトを動かすためのエントリーポイントである。
データベースのセットアップ

mysite/settings.pyを編集していく。デフォルトではSQLiteを使用します。

DATABASES = {
      'default': {
          'ENGINE': 'django.db.backends.sqlite3',
          'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
      }
}
  • ENGINE - sqlite3以外にも、'django.db.backends.sqlite3', 'django.db.backends.postgresql_psycopg2', 'django.db.backends.mysql', 'django.db.backends.oracle'などがある。
  • NAME - SQLiteを使っている場合は、データベースへの絶対パスを記述。デフォルト値のos.path.join(BASE_DIR,'db.sqlite3')はプロジェクトディレクトリを返す。 もしSQLite以外を使っているのなら、USER,PASSWORD,HOSTを追加しなければならない。
    同時にmysite/settings.pyのTIME_ZONEを設定する。
IME_ZONE = 'Asia/Tokyo'

INSTALLED_APPSには現在のインスタンスで有効なすべてのDjangoアプリケーションの名前が入る。デフォルトではいくつかのものが指定されており、それらはすべてDjangoに付属しているものである。

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)
  • admin - 管理用サイトシステム
  • auth - 認証システム
  • contenttypes - コンテンツタイプフレームワーク
  • sessions - セッションフレームワーク
  • messages メッセージフレームワーク
  • staticfiles - 静的なファイルを管理するためのフレームワーク これらはよく使われるため、デフォルトで付属している。これらのアプリケーションはデータベーステーブルをかならず使うため、そのテーブルを作成しなければならない。 そこで次のコマンドを実行する。
$ python manage.py migrate
Operations to perform:
  Apply all migrations: contenttypes, sessions, auth, admin
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying sessions.0001_initial... OK

migrateコマンドは、INSTALLED_APPSを見て必要なテーブルをmysite/settings.pyを見て作成する。

開発サーバの起動

外側のmysiteディレクトリへ移動し

$ cd ~/Documents/workspace/mysite
$ python manage.py runserver

とうちこみ、ブラウザで127.0.0.1:8000(localhost:8000)へアクセスします。It worked!とでていたら成功です。