目次
文書の過去の版を表示しています。
Django フレームワーク メモ
以下の内容は Django-1.8 のリリースに基づく情報である。
また、Mercurial - 分散バージョン管理システム(Linux) をインストールしていることを前提とする。
プロジェクトの作成
プロジェクトを作成するには以下のコマンドを実行する。
$ django-admin.py startproject django_project
django_project フォルダ | |||
---|---|---|---|
+ | django_project フォルダ | ||
| | + | __init__.py | このフォルダがPythonパッケージであることをPythonに知らせる。 |
| | + | settings.py | Django プロジェクトの設定ファイル。 |
| | + | urls.py | Django プロジェクトの URLディスパッチ定義ファイル。 |
| | + | wsgi.py | Django プロジェクトをWSGIで動作させるための設定ファイル。 |
+ | manage.py | Django プロジェクトに対する操作を行うためのユーティリティ。 |
ソースコード管理
プロジェクトを作成したらソースコード管理を行う。
$ hg init django_project $ cd django_project $ vi .hgignore
syntax: glob *.pyc *.pyo .DS_Store django_socketio .sass-cache CACHE
ソースコードを追加する。
$ hg add .hgignore を追加登録中 django_project/__init__.py を追加登録中 django_project/settings.py を追加登録中 django_project/urls.py を追加登録中 django_project/wsgi.py を追加登録中 manage.py を追加登録中
ソースコードをコミットする。
$ hg commit
プロジェクト新規作成 HG: ログを入力してください。'HG:' で始まる行は無視されます。 HG: メッセージが空のままならコミットを中止します。 HG: -- HG: ユーザ: Tomoyan <tomoyan@tomoyan.net> HG: ブランチ 'default' HG: .hgignore を追加 HG: django_project/__init__.py を追加 HG: django_project/settings.py を追加 HG: django_project/urls.py を追加 HG: django_project/wsgi.py を追加 HG: manage.py を追加
開発用サーバの起動
プロジェクトが正常に作成されると開発用サーバを起動して http://127.0.0.1:8000/ にアクセスすることで「It worked!」のページを表示することができる。
$ cd django_project $ python manage.py runserver Performing system checks... System check identified no issues (0 silenced). You have unapplied migrations; your app may not work properly until they are applied. Run 'python manage.py migrate' to apply them. July 20, 2015 - 16:36:19 Django version 1.8.3, using settings 'django_project.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
http://127.0.0.1:8000/にアクセスした様子。
メモ: 開発用サーバのポートを変更するには、コマンドを以下のようにする。
$ python manage.py runserver 8080
プロジェクト設定(settings.py)の修正
ソースエンコーディングの設定
日本語を使用しても問題が発生しないように、先頭行に以下の記述を追加してファイルを UTF-8 にて保存しなおす。
# -*- coding: utf-8 -*-
プロジェクトパス (BASE_DIR)
BASE_DIR が提供されるように変更された。
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
以前のバージョンでは、自分で os モジュールを import して、PROJECT_ROOT を定義する必要がある。
import os # プロジェクトのルートパスを取得 PROJECT_ROOT = os.path.abspath(os.path.split(__file__)[0])
PROJECT_ROOT の取得を追加する。(各動作環境のパスの差異を吸収する)
__file__ == '/private/django_proj/settings.py' の場合、'/private/django_proj' を取得。
__file__ == 'D:\My Projects\django_proj\settings.py' の場合、'D:\My Projects\django_proj' を取得。
セキュリティキー (SECRET_KEY)
セキュリティキーは django-admin.py が生成したものを利用する。(他のプロジェクトのものをコピーして共有しないこと)
# SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 'y*05eejz)j%+4&c-00i(crrgicz%2_pg+xonohqam0z0@7%f4('
デバッグ設定 (DEBUG)
以下のコメントを追加して、デバッグとリリースの切り替えが簡単にできるようにしておく。(先頭 # を移動するだけ)
# SECURITY WARNING: don't run with debug turned on in production! DEBUG = True #DEBUG = False
データベース接続設定 (DATABASES)
データベースへの接続設定を行う。(以下は PostgreSQL の例。標準では sqlite3 の設定になっている。)
DATABASES = { 'default': { # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 'ENGINE' : 'django.db.backends.postgresql_psycopg2', 'NAME' : 'django_db', # Or path to database file if using sqlite3. 'USER' : 'django', # Not used with sqlite3. 'PASSWORD' : 'test123', # Not used with sqlite3. 'HOST' : '', # Set to empty string for localhost. Not used with sqlite3. 'PORT' : '', # Set to empty string for default. Not used with sqlite3. # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
settings.py ファイル | ||
---|---|---|
設定項目 | 設定値 | 説明 |
ENGINE | 'django.db.backends.postgresql_psycopg2' | 'django.db.backends.' に 'postgresql_psycopg2', 'mysql', 'sqlite3', 'oracle' のいずれかを続けて指定する。 |
NAME | 'database_name' | データベース名を指定する。 |
USER | 'db_user_name' | ユーザー名を指定する。 |
PASSWORD | 'password' | パスワードを指定する。 |
HOST | ' ' | ホスト名を指定する。空文字の場合は localhost と同じ。 |
PORT | ' ' | ポートを指定する。空文字の場合はデフォルトポートになる。 |
メモ:
- プロジェクト設定ファイルの INSTALLED_APPS に定義されている Django に付属のミドルウェア群('django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites') はテーブルを必要とする。
そのため、これらのアプリケーションを使う前に以下のコマンドを実行して、データベースにテーブルを作成しておく必要がある。
言語設定 (LANGUAGE_CODE)
言語コードを日本に設定する。
# Language code for this installation. All choices can be found here: # http://www.i18nguy.com/unicode/language-identifiers.html #LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'ja'
タイムゾーン設定 (TIME_ZONE)
タイムゾーンをアジア/東京に設定する。
# Local time zone for this installation. Choices can be found here: # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name # although not all choices may be available on all operating systems. # In a Windows environment this must be set to your system time zone. #TIME_ZONE = 'UTC' TIME_ZONE = 'Asia/Tokyo'
その他
以前のバージョンでは以下の設定も行っていた。
- プロジェクトサイトのメディアルートを設定する。(以下ではプロジェクトルートの media ディレクトリを設定)
'/private/django_proj/media' のような内容で設定される。MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media')
- プロジェクトサイトのメディア URL を設定する。(管理サイトのメディア URL と被らないように設定)
MEDIA_URL = '/site_media/'
- 管理サイトのメディア URL を設定する。(プロジェクトサイトのメディア URL と被らないように設定)
ADMIN_MEDIA_PREFIX = '/admin_media/'
- django.template.loaders.filesystem.Loader テンプレートローダが、プロジェクトルートの templates ディレクトリを検索するように設定する。
TEMPLATE_DIRS = ( # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". # Always use forward slashes, even on Windows. # Don't forget to use absolute paths, not relative paths. os.path.join(PROJECT_ROOT, 'templates'), )
データベースサーバーの設定
パッケージのインストール
PostgreSQL を利用する場合は、PostgreSQL本体や psycopg2 をインストールする。
$ sudo yum install postgresql postgresql-server postgresql-devel pgadmin3 $ pip install psycopg2
データベースの作成
$ createdb -E UNICODE -U postgres database_name
データベースユーザーの作成
$ createuser -a -d -U postgres -P db_user_name 新しいロールのためのパスワード: <- db_user_name のパスワードを入力 もう一度入力してください: <- db_user_name のパスワード(確認)を入力 パスワード: <- postgres のパスワードを入力
テーブルの作成
データベースに必要なテーブルを作成すために、以下のコマンドを実行する。(以前の syncdb は廃止予定)
$ python manage.py migrate Operations to perform: Synchronize unmigrated apps: staticfiles, messages Apply all migrations: admin, contenttypes, auth, sessions Synchronizing apps without migrations: Creating tables... Running deferred SQL... Installing custom SQL... Running migrations: Rendering model states... DONE Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... 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 sessions.0001_initial... OK
メモ:
- テーブル作成の後に、認証システムで利用するスーパーユーザを作成しておく。
$ python manage.py createsuperuser Username (leave blank to use 'tomoyan'): Email address: tomoyan@tomoyan.net Password: Password (again): Superuser created successfully.
Admin サイトを有効化する方法
言語の設定(settings.py)
# Language code for this installation. All choices can be found here: # http://www.i18nguy.com/unicode/language-identifiers.html #LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'ja'
タイムゾーンの設定(settings.py)
# Local time zone for this installation. Choices can be found here: # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name # although not all choices may be available on all operating systems. # In a Windows environment this must be set to your system time zone. #TIME_ZONE = 'UTC' TIME_ZONE = 'Asia/Tokyo'
アプリの有効化設定(settings.py)
Django 1.8.3 では標準で有効化されている。
INSTALLED_APPS = ( ... # Uncomment the next line to enable the admin: 'django.contrib.admin',
URL ディスパッチの設定(urls.py)
Django 1.8.3 では標準でディスパッチされている。
# Uncomment the next two lines to enable the admin: from django.contrib import admin
urlpatterns = patterns('', ... # Uncomment the next line to enable the admin: url(r'^admin/', include(admin.site.urls)),
Admin サイトの表示
http://localhost:8000/admin/ にアクセスする。
管理タスク実行ユーティリティ(django-admin.py、manage.py)
django-admin.py は、Django の様々な管理タスクを実行するユーティリティである。
manage.py は Django プロジェクトを作成する際に自動生成される django-admin.py に対する軽いラッパーである。
コマンドのオプションに –help を加えることで、[subcommand] の種類を確認できる。または、[subcommand] –help をオプションに加えるとヘルプを確認できる。
$ python manage.py --help Type 'manage.py help <subcommand>' for help on a specific subcommand. Available subcommands: [auth] changepassword createsuperuser [django] check compilemessages createcachetable dbshell diffsettings dumpdata flush inspectdb loaddata makemessages makemigrations migrate runfcgi shell showmigrations sql sqlall sqlclear sqlcustom sqldropindexes sqlflush sqlindexes sqlmigrate sqlsequencereset squashmigrations startapp startproject syncdb test testserver validate [sessions] clearsessions [staticfiles] collectstatic findstatic runserver
subcommand には以下のようなものが存在する。
startapp | アプリケーションの作成 | migrate | テーブルの作成 | ||
createcachetable | キャッシュテーブルの作成 | ||||
cleanup | compilemessages | createsuperuser | dbshell | diffsettings | |
dumpdata | flush | inspectdb | loaddata | makemessages | |
runfcgi | runserver | shell | sql | sqlall | sqlclear |
sqlcustom | sqlflush | sqlindexes | sqlinitialdata | sqlreset | sqlsequencereset |
test | testserver | validate |
アプリケーションの作成(startapp)
プロジェクト内に新しいアプリケーションを作成するには以下のコマンドを実行する。
注意: プロジェクト名と同名のアプリケーションは作成できない。
$ python manage.py startapp app_name
app_name フォルダ | |||
---|---|---|---|
+ | migrations フォルダ | ||
| | + | __init__.py | このフォルダがPythonパッケージであることをPythonに知らせる。 |
+ | __init__.py | このフォルダがPythonパッケージであることをPythonに知らせる。 | |
+ | admin.py | ||
+ | models.py | Django アプリケーションのモデルを定義するファイル。 | |
+ | tests.py | Django アプリケーションのテストを定義するファイル。 | |
+ | views.py | Django アプリケーションのビューを定義するファイル。 |
テーブルの作成(migrate)
※ syncdbは1.9で廃止予定
データベースにテーブルを作成するには以下のコマンドを実行する。
$ python manage.py migrate
- migrate は、プロジェクト設定ファイルの INSTALLED_APPS 定義を参照して、アプリケーションのモデルで定義されているテーブル群を必要に応じて作成する。
- yes の入力を省略したい場合は –noinput を加えることができる。
[実行例]
$ python manage.py migrate Operations to perform: Synchronize unmigrated apps: staticfiles, messages Apply all migrations: admin, contenttypes, auth, sessions Synchronizing apps without migrations: Creating tables... Running deferred SQL... Installing custom SQL... Running migrations: Rendering model states... DONE Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... 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 sessions.0001_initial... OK
モデルの初期データを生成(dumpdata)
アプリが利用するモデルに初期データを入れるには、予めフィクスチャ(fixture)を用意しておく必要がある。
以下のコマンドを実行すると、データベースのデータから json のフィクスチャを生成できる。
$ python manage.py dumpdata app_name --format=json --indent=2
[ { "model": "myapp.person", "pk": 1, "fields": { "first_name": "John", "last_name": "Lennon", } }, { "model": "myapp.person", "pk": 2, "fields": { "first_name": "Paul", "last_name": "McCartney", } }, ]
キャッシュテーブルの作成(createcachetable)
データベースにキャッシュテーブルを作成する。
$ python manage.py createcachetable django_cache_data
settings.py にキャッシュバックエンド設定を追加する。(データベース テーブルを指定)
$ CACHE_BACKEND = 'db://django_cache_data'