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.polls
→polls
となっているので大丈夫そう。
下記コマンドで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
DjangoのAPIを叩いて遊ぶ
$ python manage.py shell