LoginSignup
20
28

More than 5 years have passed since last update.

0からのDjango開発環境構築から基本操作まで

Last updated at Posted at 2016-06-11

備忘録&身内用なのでかなり簡略的に書いてあります。初学者は他の記事も参考にするべきだと思います。

バージョンの注意

ここでは主に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はアプリケーション名)

モデルの作成

polls/models.py
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を追加。

setting.py
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を下記のように書き換えた。

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

20
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
28