2008年2月25日月曜日

【Python】 Djangoのインストールと設定

Ubuntu 7.10 Gutsy, Python 2.5, MySQL 5.0, Apache 2.0 + mod_python

DjangoはPythonのWebフレームワークだ。
Ruby on RailsやPHP Symphonyと比べてパフォーマンスは結構良いらしい。
Framework Performance in Ruby on Rails
Rails performed much better than Symfony. And Django performed much better than Rails.


Djangoをインストールする前に以下が必要。
[S] Apacheをソースからコンパイルしてインストール

[S] mod_pythonをソースからコンパイルしてインストール

[S] MySQLをソースからコンパイルしてインストール

[S] MySQL-pythonのインストール

上の4つのコンポーネントはすべてapt-getからインストール可能なので、ソースからビルドする必要はない。
【Python】 Djangoをapt-getでUbuntuにインストール
【Ubuntu】 LAMP (Linux, Apache2, MySQL, Python)一発インストール
また、DBを使わない場合はMySQLとpython-mysqlをインストールする必要はない。


本家よりdjangoをダウンロード。
http://www.djangoproject.com/download/

Django-0.96.1.tar.gzをダウンロードして解凍する。
tar zxvf Django-0.96.1.tar.gz


展開したディレクトリに移動してインストール開始。
sudo python setup.py install


Apacheの設定ファイル[apache2]/conf/httpd.confを編集する。


<Location "/myprj/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE myprj.settings
PythonDebug On
</Location>



Apacheを再起動。
[apache2]/bin/apachectrl restart


ApacheのDocumentRootに移動して、
python /usr/lib/python2.5/site-packages/django/bin/django-admin.py startproject myprj


ブラウザで「It works!」を確認する。
http://localhost/myprj

Djangoに付属している開発用serverでも確認する。
python manage.py runserver


ブラウザで「It works!」を確認する。
http://localhost:8000

開発用serverの利点はpythonスクリプトの変更が即座に反映されることと、デバッグ情報をターミナルに出力できることだ。

次にアプリケーションを登録する。
python manage.py startapp myapp


ディレクトリ構造はこうなるはず。


[DocumentRoot]
|-myprj
|-myapp



[DocumentRoot]/myprj/settings.pyを編集する。


DEBUG = True

TEMPLATE_DEBUG = True

DATABASE_ENGINE = 'mysql'
DATABASE_NAME = 'myprg'
DATABASE_USER = 'root'
DATABASE_PASSWORD = 'mypassword'
DATABASE_HOST = '127.0.0.1'
DATABASE_PORT = '3306'

TIME_ZONE = 'Asia/Tokyo Japan'

TEMPLATE_DIRS = (
'[DocumentRoot]/myprj/myapp/template',
)

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'myprj.myapp'
)



アプリケーションは複数登録できる。
ので、プロジェクトは複数のアプリケーションを持つことができる。

myappに移動して、models.pyを編集。


from django.db import models

# Create your models here.

class User(models.Model):
username = models.CharField(maxlength=200)
password = models.CharField(maxlength=200)
description = models.TextField()
score = models.IntegerField()
datetime = models.DateTimeField(auto_now=True)


MySQLにデータベースを作成する。
# [mysql]/bin/mysql -u root -p
mysql> create database myprj
mysql> quit



myprj/myapp/models.pyとデータベースを同期する。
# python manage.py syncdb


myprj/myapp/models.pyにクラスを追加すると同期する必要がある。
ただし、クラス属性(プロパティ)を変更しただけだとDBに変更が反映されない。
その時はALTER TABLEのSQLをコールする必要がある。
あるいは、データが不要ならテーブルをドロップして同期する。

myprj/myapp/modes.pyの実例


# python manage.py shell
>>> from myprj.myapps.models import *
>>> User(username='foo', password='brabra', description='Hello', score=0).save()
>>> User(username='hoge', password='brabra', description='Good-bye', score=0).save()
>>> us = User.objects.all()
>>> for u in us:
>>> print u.username, u.password, u.datetime



myprj/myapp/views.pyの実例


from django.shortcuts import render_to_response, get_object_or_404
import models
def index(request):
users = models.User.objects.all()
return render_to_response('index.html', { 'users': users })



myprj/myapp/template/index.htmlの実例


<html>
<body>
{% for user in users %}
<p>{{user.username}}, {{user.password}}, {{user.description}}</p>
{% endfor %}
</body>
</html>



myprj/urls.pyを編集。

(r'^myprj/myapp/$', 'myprj.myapp.views.index')


Apacheを再起動。
[apache2]/bin/apachectrl restart


ブラウザで以下にアクセス。
http://localhost/myprj/myapp/

動作が確認できたら、myprj/settings.pyを編集する。
DEBUG = False
TEMPLATE_DEBUG = False
これをしないとDBのSQLクエリーがメモリーに残り、メモリーリークのような振舞になる。
設定を有効にするためにApacheの再起動もわすれずに。
[Django オンラインドキュメント和訳]
Django がメモリリークを起こしているのですが、なぜですか?
Django が実行している生の SQL クエリを見られますか?

ラベル: , , ,

0 件のコメント:

コメントを投稿

登録 コメントの投稿 [Atom]

この投稿へのリンク:

リンクを作成

<< ホーム