blog.ericsk.org/archives/815
標題有沒有殺人,照著作一遍就知道囉。
在 Ruby on Rails 的官方網站上有 15 分鐘作出一個 weblog 的 screencast,的確 demo 了 RoR 開發的快速。不過萬萬不可太迷信只有 RoR 能這麼神速,根據最近擠出一點時間看 django 的東西後,我也想先來作個「10分鐘做出 blog 的挑戰」。(由於還不太會用製作 screen cast 的軟體,所以只能用文字介紹..)這篇文章只是描述一下建構過程,所以不會介紹 django 環境的安裝設定,請讀者見諒。
稍微簡介一下 django,它是一個基於 Python 語言的 Web 開發框架(framework)。
在 django 的環境裡,一個 project 裡可以有很多個 application,如此一來同一個 project 下的 application 便能共用同一套環境設定。所以我們先在命令列下執行 django-admin.py
來建立一個 project:
先來改一下 demo/settings.py
的設定,裡面設定我們會用 sqlite3 來作資料庫的引擎,然後產生一個 demo.db
的檔案來當資料庫,再設定一些時區及 template 目錄等:
[code lang="python"]
DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = 'demo.db'
...
TIME_ZONE='Asia/Taipei'
LANGUAGE_CODE='zh-tw'
...
TEMPLATE_DIRS = (
...
'.',
)
INSTALLED_APPS = (
'django.contrib.admin',
..
'demo.blog', # 等一下就會產生
)
[/code]
然後在 demo
目錄下建立一個 blog
的 app:
然後在 demo/blog/models.py
裡建立需要的 model(DB Table):
[code lang="python"]
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=32)
def __unicode__(self):
return self.name
class Admin:
pass
class Article(models.Model):
title = models.CharField(max_length=64)
published_at = models.DateTimeField('date published')
content = models.TextField()
category = models.ForeignKey(Category)
def __unicode__(self):
return self.title
class Admin:
pass
[/code]
然後可以看看 django 產生的 SQL DDL,確定的話就用 syncdb
來建立資料庫表格:
其中會要求你建立一個管理者帳號,這是為了之後進管理介面發表文章使用的帳號。完成這些動作之後,修改一下 demo/urls.py
的內容:
[code lang="python"]
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^blog/', include('demo.blog.urls')),
(r'^admin/', include('django.contrib.admin.urls')),
)
[/code]
先在 demo/blog/
下建立一個 urls.py
的檔案,然後在命令列下輸入 python manage.py runserver
,再打開瀏覽器輸入網址 http://localhost:8000/admin/
馬上就有一個後台介面可以使用了呀!
登入後你就可以直接建立 Category
及 Artical
的內容,這不就是一個現成的文章發表介面了嗎?一開始操作到現在不會超過5分鐘吧!
可以發表文章之後,當然是要能夠瀏覽呀,所以我們馬上打開 demo/blog/urls.py
這個檔案,然後貼上下列的 code:
[code lang="python"]
from django.conf.urls.defaults import *
from demo.blog.models import Article
info_dict = {
'queryset': Article.objects.all(),
}
urlpatterns = patterns('',
(r'^$', 'django.views.generic.list_detail.object_list', info_dict),
(r'^(?Pd+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
)
[/code]
然後再分別建立 demo/blog/article_list.html
及 demo/blog/article_detail.html
這兩個檔案,分別表示文章列表及文章內容:
article_list.html:
[code lang="python"]
{% if object_list %}
{% for article in object_list %}
{% endfor %}
{% else %}
對不起沒有文章喔!
{% endif %}
[/code]
article_detail.html:
[code lang="python"]
修改
BACK
[/code]
這樣很快就弄出一個很像樣的 blog (只是不能留言 XD),網址在 http://localhost:8000/blog/
。
很快吧!當然我忽略了美工,也沒有客製化一下後台,不過 Web 開發愈來愈可怕了....真怕這種開發框架愈來愈多,老板都覺得寫網頁沒什麼了呢!
值得一提的是,django 在 runserver 之後,都會把程式碼 compile 成 pyc 檔,看起來效率應該還不錯,也許要等我多玩熟一點才能做些實驗囉。