以下のコマンドでインストールする。
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
いいブログだ