以 django 來開發網頁

今天剛好碰到以前的同事問我關於 django 開發網頁的事情。我才想到, 上一次想到 django 相關的 packages 似乎講得不夠詳細。這邊稍微補充一下。

Web Server

如果不是很 heavy 的網站, 流量不大的話, 其實 apache2 就很足夠了。個人偏好是因為從很早就開始使用 apache, 也習慣他的 configuration 了。至於如果常見大家所使用的 deployment, 就是使用 nginx 外加 gunicorn 了。
A Django setup using Nginx and Gunicorn 這篇文章寫得頗清楚的。我個人是使用 Ubuntu, 因此選用 upstart 來寫他的 service script。

Environment

上一段提到的部落格文章有特別提到一個東西就是 virtualenv, 個人也相當推薦使用。他會將你的 python environment cage 在某個目錄, 因此 django 所使用到的套件並不會跟系統的 python 混淆。Tools of the Modern Python Hacker: Virtualenv, Fabric and Pip 這篇文章有提到。目前我還沒有使用 fabric 來做 deployment, 不過 virtualenv + pip 就非常好用了。

Settings

Django package ship 出來的 settings.py 其實不太適合 development/production 使用。SplitSettings 這個頁面寫了很多種方式來把兩邊分開來。

Template

Django 1.4 的 template 其實已經比以前好用非常多, 不過看到 instagram 使用 jinja2, 再看到 jinja2 官網的說明, 就會想要做這個 optimization。缺點就是如果你有使用第三方套件, template tags 以及 plugin 可能需要自己重刻。比較常見的搭配方式就是 jinja2 + coffin

CSS / js compression

django 有幾個套件可以做這件事情, 我目前有使用的是 django-pipeline。其他 solution 可以參考 Django packages -- asset managers。用這個東西的時候, 如果有 include 額外自己寫的 js, 記得要將變數 export 出來給 window, 否則變數都會被 cage 起來。

幾個月前看到這篇很棒的文章 -- What Powers Instagram: Hundreds of Instances, Dozens of Technologies, 裏頭提到了非常多不同面向的 solution, 值得參考。剛剛也在 quora 上看到這個 What technology stack is Instagram built with? 裡面也提到不少東西。