2008年3月8日土曜日

【Python】 Djangoをapt-getでUbuntuにインストール

Ubuntu 7.10 Gutsy

Djangoをapt-getしてインストールする場合を紹介する。

Djangoを本家からダウンロードしてセットアップする場合は以下を参考。
【Python】 Djangoのインストールと設定

DjangoはPythonのWebフレームワークで最近勢いがある。
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をインストールする前に以下の準備が必要。
【Ubuntu】 apt-getでインストールした場合のLAMP (Python)の設定

では、Djangoのインストール。

# sudo apt-get install python-django


DocumentRootに移動。
デフォルトでは/var/www

# cd /var/www
# sudo django-admin startproject myprj
# ls


Apache2の設定。
# sudo gedit /etc/apache2/sites-available/default



<Location "/myprj/">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
SetHandler python-program
PythonPath "['/var/www'] + sys.path"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE myprj.settings
PythonDebug On
</Location>



Apache2を再起動。
# /etc/init.d/apach2 restart

ブラウザで確認。
http://localhost/myprj

Djangoに付属している開発用serverでも確認する。
# cd /var/www/myprj
# python manage.py runserver
http://localhost:8000/myprj

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

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

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

[DocumentRoot]
|-myprj
|-myapp


/var/www/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 = (
'/var/www/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をUTF-8に。
/etc/mysql/my.cnfを編集。
# sudo gedit /etc/mysql/my.cnf


[client]
default-character-set=utf8

[mysqld]
default-character-set=utf8
skip-character-set-client-handshake


MySQL再起動。
# /etc/init.d/mysql restart

MySQLにデータベースを作成する。


# mysql -u root -p
mysql> create database myprj
mysql> quit



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

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

/var/www/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



/var/www/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 })



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


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



/var/www/myprj/urls.pyを編集。

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


Apacheを再起動。
/etc/init.d/apache2 restart


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

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

ラベル: , , , ,

0 件のコメント:

コメントを投稿

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

この投稿へのリンク:

リンクを作成

<< ホーム