@blog.justoneplanet.info

日々勉強

Djangoをインストールする

以下のコマンドでインストールする。

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

1件のコメント»

いいブログだ

RSS feed for comments on this post.TrackBack URL

Leave a comment