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