python:django:django_memo

文書の過去の版を表示しています。


Django フレームワーク メモ

 以下の内容は Django-1.8 のリリースに基づく情報である。

プロジェクトを作成するには以下のコマンドを実行する。

$ 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 <tomoyan596@gmail.com>
HG: ブランチ 'default'
HG: .hgignore を追加
HG: firerose/__init__.py を追加
HG: firerose/settings.py を追加
HG: firerose/urls.py を追加
HG: firerose/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/にアクセスした様子。
Django開発サーバ

メモ: 開発用サーバのポートを変更するには、コマンドを以下のようにする。

$ python manage.py runserver 8080

日本語を使用しても問題が発生しないように、先頭行に以下の記述を追加してファイルを UTF-8 にて保存しなおす。

# -*- coding: utf-8 -*-

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' を取得。

セキュリティキーは 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('

以下のコメントを追加して、デバッグとリリースの切り替えが簡単にできるようにしておく。(先頭 # を移動するだけ)

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
#DEBUG = False

データベースへの接続設定を行う。(以下は 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 for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
#LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ja'

タイムゾーンをアジア/東京に設定する。

# 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'

以前のバージョンでは以下の設定も行っていた。

  1. プロジェクトサイトのメディアルートを設定する。(以下ではプロジェクトルートの media ディレクトリを設定)
    '/private/django_proj/media' のような内容で設定される。
    MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media')
  2. プロジェクトサイトのメディア URL を設定する。(管理サイトのメディア URL と被らないように設定)
    MEDIA_URL = '/site_media/'
  3. 管理サイトのメディア URL を設定する。(プロジェクトサイトのメディア URL と被らないように設定)
    ADMIN_MEDIA_PREFIX = '/admin_media/'
  4. 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.

参考文献:
はじめての Django アプリ作成、その 1 — Django v1.0 documentation

# 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'
# 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)),

http://localhost:8000/admin/ にアクセスする。

 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

 プロジェクト内に新しいアプリケーションを作成するには以下のコマンドを実行する。
 注意: プロジェクト名と同名のアプリケーションは作成できない。

$ 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 アプリケーションのビューを定義するファイル。

 ※ 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

 アプリが利用するモデルに初期データを入れるには、予めフィクスチャ(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",
    }
  },
]

 データベースにキャッシュテーブルを作成する。

$ python manage.py createcachetable django_cache_data

 settings.py にキャッシュバックエンド設定を追加する。(データベース テーブルを指定)

$ CACHE_BACKEND = 'db://django_cache_data'
  • python/django/django_memo.1440035509.txt.gz
  • 最終更新: 2019/05/18 02:23
  • (外部編集)