temporaryなめも帳

だらだらと備忘録とか。誰かの為になることをねがって。

Djangoであそんでみる

ただの備忘録。 はじめての Django アプリ作成、その 1を写経してる最中のメモです。

環境設定

Mac

$ pip install virtualenv
$ pip install virtualenvwrapper

Ubuntu

$ sudo apt-get install python2.7 python2.7-dev python-virtualenv

virtualenv作成

virtualenvwrapperを使うといいみたい。

$ sudo apt-get install virtualenvwrapper
$ mkvirtualenv --no-site-package sample

上記でsampleという仮想環境を作れる。--no-site-packageはメイン環境のsite-pakcageを受け継がないように指定するオプション。 -pオプションを使えば、利用するインタプリタを指定できる。

virtualenvのログイン、ログアウト、削除はそれぞれ以下のコマンドで行う

$ workon sample
$ deactivate
$ rmvirtualenv sample

作ったvirtualenvをpycharmで利用したければ、以下が参考になる。 https://www.jetbrains.com/pycharm/webhelp/adding-existing-virtual-environment.html Settings > Project Interpreterのsettingsアイコンから、Add Localを選択しvirtualenvの場所を指定する。その後、Interpreterをvirtualenvのものに変更すればよい。 Djangoが入ってないので、そのままpycharmから入れちゃうといい。

virtualenvwrapperを使わずに、virtualenvを利用するときは、以下コマンドが使える。

$ cd <virtualenv-path>
$ source bin/activate
(virtualenv)$ deactivate

project 作成

$ django-admin.py startproject <hoge>

pythonのプロジェクトができるので、叩いた後にpycharmで読み込んだらいいかも。

server起動

生成したプロジェクトの中で

$ python manage.py runserver

実行後、localhost:8000にアクセスすれば起動確認ができる。

db周りの設定

これでDBを作成してくれる。標準状態だとsqlite3になる。

$ python manage.py syncdb

mysqlとか使いたかったら、settings.pyをいじればいい感じ。 標準状態で、settings.pyのINSTALLED_APPSに定義したdjangoのモジュールをいくつかロードするみたい。 要らないなら消してもいいとのこと。

applicationの作成

$ python manage.py startapp <hoge>

作ったアプリケーションはINSTALLED_APPSに登録する。

mysite.pollsだとNGだった。pollsだといけるんだけど、djangoのversion違いのせい?

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls' #<--- add
)

modelの作成

続いて、以下コマンド叩いたらエラー拾う。

$ python manage.py sql polls
CommandError: App 'polls' has migrations. Only the sqlmigrate and sqlflush commands can be used when an app has migrations.

http://stackoverflow.com/questions/24215005/django-commanderror-app-polls-has-migrations やはり、ドキュメントと利用しているバージョンが異なる様子。

英語版のページだと、バージョンごとに用意されてるっぽので、こっちのページに変更して進める。1.7向けのページだと、mysite.pollspollsとなっているので大丈夫そう。

下記コマンドでmodelの変更をstoreしてもらえる。このあと、migrateコマンドを叩くとtableの生成が行われる。ここで実行されるSQL文が知りたければsqlmigrateコマンドを叩くといい。

$ python manage.py makemigrations polls
$ python manage.py sqlmigrate polls 0001
BEGIN;
CREATE TABLE "polls_choice" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "choice" varchar(200) NOT NULL, "votes" integer NOT NULL);
CREATE TABLE "polls_poll" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "question" varchar(200) NOT NULL, "pub_date" datetime NOT NULL);
CREATE TABLE "polls_choice__new" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "choice" varchar(200) NOT NULL, "votes" integer NOT NULL, "poll_id" integer NOT NULL REFERENCES "polls_poll" ("id"));
INSERT INTO "polls_choice__new" ("votes", "id", "choice") SELECT "votes", "id", "choice" FROM "polls_choice";
DROP TABLE "polls_choice";
ALTER TABLE "polls_choice__new" RENAME TO "polls_choice";
CREATE INDEX polls_choice_582e9e5a ON "polls_choice" ("poll_id");

COMMIT;
$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, contenttypes, polls, auth, sessions
Running migrations:
  Applying polls.0001_initial... OK

DjangoAPIを叩いて遊ぶ

$ python manage.py shell