www.kokkaitter.com のサイトの裏には、発言をまとめたデータベースがある。アクセスがある度に、そのデータベースを参照してページを生成している。このような手法は頻繁に更新されるサイトを作るとき便利だ。なぜならデータベースを更新すれば、すぐにそれがサイトに反映されるからだ。
ところが、kokkaitter.com は、動的なサイトではない。ページの内容が書き換わるタイミングは、私が議事録からデータをコピペして追加したときだけで、普段はデータベースから読み込んで表示するだけだ。そういう場合、データベースから読み込んで生成したページをあらかじめ作っておいて、アクセスの度にページを生成しないようにすると、より速くページを表示させることができる。
この機能はキャッシュと呼ばれる。 Django では、簡単にキャッシュの機能を利用することができる。
Django にはキャッシュを実装する方法として、memcached を使う方法と、データベースを使う方法と、ファイルシステムを使う方法と、ローカルメモリを使う方法の 3 通りの方法がある。さくらで Django を CGI として動かしている場合、使えるのはデータベースを使う方法と、ファイルシステムを使う方法の 2 つだけだ。このうち、データベースを使う方法を、今回試してみた。Django のキャッシュフレームワークの通りにやったら、簡単にできた。
まず、
python manage.py createcachetable [cache_table_name]
して、キャッシュ用のデータベーステーブルを作る。[cache_table_name]は、他のテーブルと名前がかぶらなければ何でもいい。で、 setting.py
CACHE_BACKEND = 'db://さっき作ったテーブルの名前'
と書く。
次に、今回はビュー単位でキャッシュすることにしたので、view.py で from django.views.decorators.cache import cache_page して、キャッシュを使う関数の前に、 @cache_page(キャッシュの時間(秒)) を書くだけ。たとえばキャッシュのタイムアウトを 1 日に設定するときは、 @cache_page(60*60*24)
これだけ。簡単過ぎる。 DjangoかわいいよDjango