以下のコマンドでインストールする。
wget http://www.djangoproject.com/download/1.2.3/tarball/
tar xzvf Django-1.2.3.tar.gz
cd Django-1.2.3
python setup.py install
以下のコマンドでインストールできたか確認する。
python
import django
print(django.VERSION)
#(1, 2, 3, 'final', 0)
■プロジェクト作成
以下のコマンドでプロジェクトを作成する。
django-admin.py startproject dj
■開発サーバ起動
以下のコマンドで開発サーバを起動する。
cd dj
chmod 0744 manage.py
./manage.py runserver
以下のようにポートを指定することもできる。
cd dj
chmod 0744 manage.py
python ./manage.py runserver 0.0.0.0:80
■設定ファイル
以下のコマンドで設定ファイルを編集する。
vi setting.py
試しに編集してみる。
タイムゾーン
以下の項目を
TIME_ZONE = 'America/Chicago'
以下のように変更する。
TIME_ZONE = 'Asia/Tokyo'
言語
以下の項目を
LANGUAGE_CODE = 'en-us'
以下のように変更する。
LANGUAGE_CODE = 'ja'
データストア
以下のように記述して設定する。
DATABASES = {
'default': {
'ENGINE': 'sqlite3',
'NAME': os.path.dirname(__file__) + os.sep + 'dj.sqlite',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
MySQLならば以下のようになる。
DATABASES = {
'default': {
'ENGINE': 'mysql',
'NAME': 'dbname',
'USER': 'admin',
'PASSWORD': 'hogehoge',
'HOST': 'localhost',
'PORT': '3306',
}
}
■DBセットアップ
このまま初期状態を生成しようとするとエラーが出るはずだ。
sqlite
以下のようなエラーが表示される。
ImproperlyConfigured("Error loading %s: %s" % (module, exc))
django.core.exceptions.ImproperlyConfigured: Error loading pysqlite2 module: No module named pysqlite2
pythonからsqliteに接続するドライバが無いらしいので、以下のコマンドでインストールする。
wget http://pypi.python.org/packages/source/p/pysqlite/pysqlite-2.6.0.tar.gz
tar xzvf pysqlite-2.6.0.tar.gz
cd pysqlite-2.6.0
python setup.py install
MySQL
以下のようなエラーが表示される。
raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb
pythonからMySQLに接続するドライバが無いらしいので、以下のコマンドでインストールする。
setuptools
MySQL-pythonをインストールする際に必要なので、先にインストールする。
wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
tar xzvf setuptools-0.6c11.tar.gz
cd setuptools-0.6c11
python setup.py install
MySQL-python
以下のコマンドでMySQL-pythonをインストールする。
wget http://pypi.python.org/packages/source/M/MySQL-python/MySQL-python-1.2.3.tar.gz
tar xzvf MySQL-python-1.2.3.tar.gz
cd MySQL-python-1.2.3
python setup.py install
エラー1
インストールの途中で以下のようなエラーが発生するかもしれない。
_mysql.c:2444: error: '_mysql_ConnectionObject' has no member named 'open'
error: command 'gcc' failed with exit status 1
対策
以下のコマンドでmysql-develをインストールする。
yum --enablerepo=remi,epel install mysql-devel.x86_64
■アプリケーション生成
以下のコマンドでアプリケーション(の一部)を生成する。
./manage.py startapp article
以下のコマンドを実行してsetting.pyにも反映させる。
vi setting.py
以下の部分を
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
)
以下のように変更する。
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'dj.article',
)
■モデル
以下のコマンドでモデルを編集する。
cd article
vi model.py
編集前は以下のように記述されている。
from django.db import models
# Create your models here.
例えば以下のようにモデル部分を記述する。
# -*- coding: utf-8 -*-
from django.db import models
# Create your models here.
class Article(models.Model):
id = models.AutoField(primary_key = True)
title = models.CharField(max_length = 256)
content = models.TextField()
date = models.DateField()
class Meta:
db_table = 'article'# table name
■コマンドラインから操作
なんでも生成したクラスを使ってデータの挿入ができるらしいぞ!
./manage.py shell
以下を入力する。
from article.models import Article
article = Article()
article.title = 'hogehoge'
article.content = 'this is a hoge pen'
article.date = '2010-10-10'
article.save()
なんと直感的なデータ挿入でござんしょう!
■テンプレートの生成
以下のコマンドを入力し設定ファイルを編集する。
vi setting.py
以下のように記述しテンプレートファイルの格納場所を指定する。
TEMPLATE_DIRS = (
'/var/www/vhosts/domain/subdomains/dj/templates',
)
/var/www/vhosts/domain/subdomains/dj/templates/page/article.html
以下のようにテンプレートファイルを記述する。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>{{article.title}}</title>
<head>
<body>
<h2>{{article.title}}</h2>
<nav class="date">{{article.date}}</nav>
<article>
{{article.content}}
</article>
</body>
</html>
分かると思うけど、{{}}の部分は変数が展開されるところですな。アサインした変数は自動でエスケープされるが、その処理を無効化したい場合は以下のように記述する。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>{{article.title}}</title>
<head>
<body>
<h2>{{article.title}}</h2>
<nav class="date">{{article.date}}</nav>
<article>
{{article.content|safe}}
</article>
</body>
</html>
これでHTMLを含んだコンテンツを反映することができる。但し、XSSには注意すること。
■URLディスパッチャの設定
vi urls.py
以下のように記述する。
urlpatterns = patterns('',
(r'^article/(?P<id>[0-9]+)/$', 'dj.article.views.article'),
)
■ビュー関数
以下のコマンドでビュー関数を付加する。
vi article/views.py
以下のように記述する。
from django.http import HttpResponse
from django.template import Context, loader
from models import Article
# Create your views here.
def article(request, id):
article = Article.objects.get(id = id)
tpl = loader.get_template('page/article.html')
context = Context({'article' : article})
return HttpResponse(tpl.render(context))
もう直感的にガシガシくる感じだね!
■確認
以下のコマンドを入力して開発サーバを起動しブラウザで確認する。
./manage.py runserver 192.168.1.123:8080