備忘録&身内用なのでかなり簡略的に書いてあります。初学者は他の記事も参考にするべきだと思います。
バージョンの注意
ここでは主にpython 2.7.10, Django 1.6で作業した。
python 3系, Django1.9で作業する時は下記の点に注意
$ pyenv install
時に適切なバージョンを選択する
$ pip install django
時に適切なバージョンを選択する。(デフォルトで最新の1.9が入る)
Django1.6だと モデル書いてから $ python manage.py syncdb
一発でデータベースが作成される感じ。
1.9だとモデル書いてから
$ python manage.py makemigrations アプリ名
でマイグレーションファイル作ってから
$ python manage.py migrate
でマイグレーションファイルからDBを作成する感じ。
以上(たぶん)。
1. 環境構築
1-1.pyenv をインストール
GitHubからインストール
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
(~/.pyenvはローカルのディレクトリ名。適当な名前にする)
pyenvの設定をzshenv、bash_profile等に書き込む。
export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"
($HOME
はpyenvのインストール場所に適宜書き換える)
Shellを再起動して設定を反映させる。
$ exec $SHELL
1-2. pythonのインストール
pyenvからpythonをインストールする。
$ pyenv install 2.7.10
インストールしたバージョンをセット。
$ pyenv global 2.7.10
$ pyenv rehash
確認
$ pyenv versions
* 2.7.10 (set by /hoge/.pyenv/version)
1-3. Djangoのインストールとテストプロジェクト作成
pip からDjango1.6のインストール
$ pip install django==1.6
テストプロジェクト作成
$ django-admin.py startproject mysite
サーバー起動
$ cd mysite
$ python manage.py runserver
http://localhost:8000 にアクセスし、サーバーが動いてるか確認する。
2. Djangoのテストプロジェクト
2-1. 基本的な使用方法
主な参照 はじめての Django アプリ作成、その 1 | Django 1.4 Documentation
設定ファイル(setting.py)の編集
DBに関する設定を変更する。デフォルトではsqliteが使われる設定だが、今回はPostgreSQLを使用する。
参照 DjangoでPostgreSQLを使えるようにしたときのメモ | Qiita
上記サイトを参考にpostgresqlのライブラリなどをインストールし、新しいユーザーとデータベースを作成したと仮定。
setting.py
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mysite',
'USER': 'djangouser',
'PASSWORD': 'pass',
'HOST': '127.0.0.1',
'PORT': 5432,
}
}
テーブルの作成
下記コマンドを実行することでsetting.py中の INSTALLED_APPSに記述されているアプリケーションで使われるテーブルを作成する。
$ python manage.py syncdb
(syncdb コマンドは INSTALLED_APPS 設定を探し、 settings.py のデータベース設定に従ってデータベース上に必要なテーブ ルを作成する。)
アプリケーションの作成
$ python manage.py startapp polls
(pollsはアプリケーション名)
モデルの作成
from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField()
プロジェクトにpollsアプリを認識させる
プロジェクトにpollsアプリを認識させるために設定を書き換える。
INSTALLED_APPS
内にpolls
を追加。
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
# 'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'polls',
)
作成したモデルからSQLを表示させる
$ python manage.py sql polls
BEGIN;
CREATE TABLE "polls_poll" (
"id" serial NOT NULL PRIMARY KEY,
"question" varchar(200) NOT NULL,
"pub_date" timestamp with time zone NOT NULL
)
;
CREATE TABLE "polls_choice" (
"id" serial NOT NULL PRIMARY KEY,
"poll_id" integer NOT NULL REFERENCES "polls_poll" ("id") DEFERRABLE INITIALLY DEFERRED,
"choice" varchar(200) NOT NULL,
"votes" integer NOT NULL
);
COMMIT;
モデルからSQL文を発行し、DBに書き込む
$ python manage.py syncdb
Python の対話シェルでDjangoのAPIを遊ぶ
参照 はじめての Django アプリ作成、その 1 | Django 1.4 Documentation のAPIで遊んでみるより。
pythonの対話シェルを起動する。
$ python manage.py shell
(上記サイトを参考にして色々遊ぼう)
ちなみに遊ぶ過程でpolls/models.pyを下記のように書き換えた。
import datetime
from django.utils import timezone
from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __unicode__(self):
return self.question
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField()
def __unicode__(self):
return self.choice