MacOS Leopard に DJango インストール

環境:
Mac Leopard 10.5.2
MySQL 5.0.51

mysql アンインストール

参考URL
http://www.designalikie.com/manual/2006/10/mysql_1.html

ターミナルを使用して削除する。
削除するファイル
1.「/usr/local/」以下のmysql関連のフォルダ
2. 「/Library/StartupItems/MYSQL」
<データがあまりなければ>
MySQLをアンインストールするには「/usr/local/」以下に入っているMySQLを

$ sudo rm -rf /usr/local/mysql
↑「/usr/local/mysql」部分に削除したいファイルのパスを入れる
$ sudo rm -rf /Library/StartupItems/MYSQL

とやって全て削除する。
<データがある場合>
mysql/data」をバックアップしておいて削除して、改めてMySQLをインストールしてからバックアップしておいた「data」を持ってくれば移行ができる

mysql インストール

leopard 10.5.2 でdmg から入れてみたら、MySQLdbとの相性が悪そうだったので」ソースからインストールすることにした。

参考URL
http://hivelogic.com/articles/installing-mysql-on-mac-os-x/

・ダウンロード
$ http://dev.mysql.com/downloads/mysql/5.0.html#source
・インストール
$ tar xvf mysql-5-1.0.51a.tar
$ cd mysql-5-1.0.51a
$ CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc \
CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \
-fno-exceptions -fno-rtti" \
./configure --prefix=/usr/local/mysql \
--with-extra-charsets=complex --enable-thread-safe-client \
--enable-local-infile --enable-shared
$ make
$ sudo make install
・初期DB構築
$ cd /usr/local/mysql
$ sudo ./bin/mysql_install_db --user=mysql
$ sudo chown -R mysql ./var
設定ファイルコピー
$ sudo /usr/local/mysql/share/mysql/my-small.cnf /usr/local/mysql/my.cnf
vi my.cnf
-----
[client]
default-character-set=utf8

[mysqld]
default-character-set = utf8
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8
-----

・自動起動
以下を"com.mysql.mysqld.plist"としてファイル保存

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>KeepAlive</key>
    <true/>
    <key>Label</key>
    <string>com.mysql.mysqld</string>
    <key>Program</key>
    <string>/usr/local/mysql/bin/mysqld_safe</string>
    <key>RunAtLoad</key>
    <true/>
    <key>UserName</key>
    <string>mysql</string>
    <key>WorkingDirectory</key>
    <string>/usr/local/mysql</string>
</dict>
</plist>
$ sudo mv ~/Desktop/com.mysql.mysqld.plist /Library/LaunchDaemons
$ sudo chown root /Library/LaunchDaemons/com.mysql.mysqld.plist
$ sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysqld.plist
  → このときエラー発生
launchctl: propertyList is NULL
launchctl: no plist was returned for: /Library/LaunchDaemons/com.mysql.mysqld.plist
launchctl: no plist was returned for: /Library/LaunchDaemons/com.mysql.mysqld.plist
nothing found to load
   保存したファイルにMacのテキストエディタの余分な情報が付与されていたためだった。
   vi で書いて保存しなおしたらOK!!

$ mysql -uroot

MySQLdb インストール

1.以下でソースをダウンロード
http://sourceforge.net/projects/mysql-python

2.圧縮ファイル展開
tar xvf MySQL-python-1.2.2.tar.gz
cd MySQL-python-1.2.2
sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql
vi _mysql.c
-----
以下を削除
#ifndef uint
#define uint unsigned int
#endif
-----
sudo python setup.py build
sudo python setup.py install

DJangoインストール

1. ダウンロード
http://www.djangoproject.com/download/0.96.1/tarball/
2. インストール
tar xvf Django-0.96.1.tar
cd Django-0.96.1
sudo python setup.py install

Djangoのプロジェクトをつくってみる

参考URL
http://ymasuda.jp/python/django/docs_0.95/tutorial01.html

プロジェクト作成

django-admin.py startproject mysite
・WEBサーバー起動
cd mysite
python manage.py runserver
・動作確認
 http://127.0.0.1:8000/

Databaseの設定

mysql -u root -p
> create database django_test;
> grant all on django_test.* to django@localhost;
> quit;
vi /RROJECT_ROOT/settings.py
-----
データベースへの接続パラメタに合わせましょう:
DATABASE_ENGINE -- 'postgresql', 'mysql' または 'sqlite3'のいずれかです.他のデータベースもじきにサポートします.
DATABASE_NAME -- データベースの名前です. SQLite を使っている場合にはデータベースファイルのフルパス (絶対パス) にします.
DATABASE_USER -- データベースのユーザ名です (SQLite では使いません).
DATABASE_PASSWORD -- データベースのパスワードです.(SQLite では使いません).
DATABASE_HOST -- データベースのあるホストです.データベースサーバが物理的に同じマシン上にあるのなら空文字列にしておきます.(SQLite では使いません).
-----

初期テーブル作成
python manage.py syncdb

投票アプリケーションの作成

モデルを作成する

参考URLのチュートリアルに記載されている投票(polls)アプリケーションを作成してみる。
Django でデータベース Web アプリケーションを書くための最初のステップは,モデルの定義だそうだ。
※本質的には,データベースのレイアウトと,追加のメタデータの定義らしい。

$ python manage.py startapp polls
$ vi polls/models.py
from django.db import models

class Poll(models.Model):
    question = models.CharField(maxlength=200)
    pub_date = models.DateTimeField('date published')

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(maxlength=200)
    votes = models.IntegerField()

モデルを有効にする

プロジェクトにpollアプリケションの存在を教える
$ vi /PROJECT_ROOT/settings.py
-----
   :
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'mysite.polls'
)
-----

・実行されるSQL文を確認する
以下のコマンドではまだDBにテーブルは作成されない
$ 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"),
    "choice" varchar(200) NOT NULL,
    "votes" integer NOT NULL
);
COMMIT;
・以下コマンドでDBに、pollアプリのテーブルが初めて作成される
$ python manage.py syncdb

後はチュートリアル1をいろいろ触って終了。

はまった箇所

mysqldbインストール
$ python
Python 2.5.1 (r251:54863, Jan 17 2008, 19:35:17) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> import MySQLdb
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "build/bdist.macosx-10.5-i386/egg/MySQLdb/__init__.py", line 19, in <module>
  File "build/bdist.macosx-10.5-i386/egg/_mysql.py", line 7, in <module>
  File "build/bdist.macosx-10.5-i386/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dynamic module does not define init function (init_mysql)

 → 結局、ソースからインストールで解決!