Django, how to start
作者警告:本簡報內的資訊多未經嚴格查證,請讀者務必注意。
- 不大懂程式設計。
- COREBlog 不太夠用,想弄一個適合自己的 blog 軟體:
- 要很方便地取用 reStructuredText 的各種能力。
- 一個禮拜花一個小時左右,何時能用不知道。
- 尋找 light-weight web programming framework:
- 感覺 Django 比 TurboGears 適合我。
- Fun.
- 純粹的 Python package。
- MVC 程式設計架構。
- Django 中亦稱 MTV: Model-Template-View。
- 物件化的資料庫模型。
- 可延伸的模板系統。
- 使用 regex 管理 URL。
- 內建的管理介面 (admin app) 以及必要的支援功能 (使用者/群組、行程等)。
- Ajax (正於 magic-removal branch 內開發)。
- 已實際佈署 production site。
- 高效能;內建有可自訂的快取機制。
- 開發模式穩定。
- Django 開發人員將 /trunk 保持在穩定可用的狀態,開發中版本存在於 /branches 中。
- Linux/Windows/MacOS 通吃。
- It's in Python, and Pythonic.
- 穩定支援 postgresql, mysql 與 sqlite(3)。
- 官方建議使用 postgresql。
- Oracle 與 MSSQL 支援刻正開發中,應已有可用的版本。
- 目前一個 webapp 僅能使用一個資料庫,此乃受限於 Django 所採用的 ORM。
- 內建開發用的 web server。
- 官方建議「絕對不要」用內建的 web server 提供任何非開發用途的服務。
- 已知可佈署於 Apache1/2, lighttpd, twisted 三種 web server,支援 mod_python, SCGI, FCGI 三種模式。
- 在 Apache1/2 下,支援 mod_python (效率最高) 與 SCGI, FCGI。
- 使用 twisted 時可為 webapp 提供單一包裝的發行版本,不需另行安裝 web server。
- 0.91 中有許多的 magic,目前正在 magic-removal branch 中處理。
- 沒有 CGI 模式,需要長效執行的行程。
- Multi-threading 似乎有問題,但正在處理中。
- Django 仍在開發中,不定期發行,安裝需使用 setuptools。
- Django package/vcs 裡含有相當完整而及時的文件。
- 仍有不足之處,須至官網查詢。
- Django trac 有更多更新快速的資訊 (howto 不少會放在 trac wiki 裡面)。
- 開發動作大都發生於 branches,trunk 多是 bugfix 與資訊 (翻譯、文件) 更新。
- 開發版的 Django 基本上不需要安裝。
- svn co http://code.djangoproject.com/svn/django/trunk django_svn 後,讓 $PYTHONPATH 裡包含有 django_svn/django package 即可。
- 我習慣在開發目錄裡作一個 symlink 到 django_svn/django。
- 所有開發從執行 django/bin/django-admin.py 工具程式開始。
- django-admin.py startproject <name>:
- django-admin.py startapp <name>:
- app(lication) 可視為一 webapp 中的功能模組。
$ django-admin.py startproject testp
$ django-admin.py startapp testa
$ mv testa testp/
- 得到 database model 和 webapp view。
testp/
|-- __init__.py
|-- manage.py
|-- settings.py <-- project-wide settings.
|-- testa
| |-- __init__.py
| |-- models <-- present one db.
| | |-- __init__.py
| | `-- testa.py <-- present one table.
| `-- views.py <-- MVC Controller.
`-- urls.py <-- url regex.
- 模板 (template) 即 MVC 中的 view。
- 所有模板需以 .html 副檔名結尾。
- 存放模板的目錄設定於 project setting.py,為一 list。
- 模板與 app 有 fallback 綁定。
- fallback 提供 app developer 預設模板的能力。
- django/contrib/admin app 使用 fallback 來提供預設的 admin 介面模板。
- 使用 django/bin/make-messages.py 工具從 .po 產生 .mo。
- 只進行 /trunk 的翻譯;/branches 定期會從 /trunk merge 更新,包括翻譯的部分。
- Frameless.
- i18n/l10n ready.
- 配合內建的 user/group/permission app,支援認證。
- 已有部分使用 ajax widget。
- 可存取 Python object, object method, tuple, list, dictionary。
- 雖須以 .html 結尾,但實可產生任何文字格式資料。
- 提供 filter 進行通用的資料操作。
- i18n/l10n ready。
- 變數以 {{ var }} 表示;(功能) 標籤以 {% tag %} 表示;filter 以 {{ var|filter }} 表示。
- 利用自行撰寫的 Python 模組,可建立自訂的新標籤。
- { block name } 同時用於:
- 定義可被其它模板繼承取代的區塊,
- 取代所繼承模板的區塊內容。
- { extends "name" } 宣告此模板所繼承自的模板。
- 由 django.contrib.syndication 提供支援 Atom 及 RSS1, RSS2 的能力。
- 本質上是一組 Django view/template。
- webapp 開發者僅需定義相關的類別模型。
- 使用已存在的 model (ORM),不必定義新的。
- 置於 project package 內。
- 平行於 Django 的 MTV 架構,介於 Django 所處理的 HTTP request/response 之間。
- Django cache 由此實作。
- Django 由此實作 session 支援。
- Django 將靜態資料 (HTML, CSS, 圖片、影像) 交由 web server 處理。
- 靜態資料的伺服能力完全取決於所使用的 web server,與 Django 無涉。
- 仍提供伺服靜態資料的 view,但官方不建議使用於 production site。