用 Python + django 10分鐘內作出一個 blog

blog.ericsk.org/archives/815

標題有沒有殺人,照著作一遍就知道囉。

在 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 目錄等:
[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/ 馬上就有一個後台介面可以使用了呀!


發表文章的介面還蠻好用的呢

登入後你就可以直接建立 CategoryArtical 的內容,這不就是一個現成的文章發表介面了嗎?一開始操作到現在不會超過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.htmldemo/blog/article_detail.html 這兩個檔案,分別表示文章列表及文章內容:

article_list.html:
[code lang="python"]
{% if object_list %}
{% for article in object_list %}

{{ article.title }}

{% endfor %}
{% else %}

對不起沒有文章喔!

{% endif %}
[/code]

article_detail.html:
[code lang="python"]

標題: {{ object.title }}
{{ object.published_at }}
{{ object.content }}
發表於: {{ object.category.name }}

修改

BACK

[/code]

這樣很快就弄出一個很像樣的 blog (只是不能留言 XD),網址在 http://localhost:8000/blog/

很快吧!當然我忽略了美工,也沒有客製化一下後台,不過 Web 開發愈來愈可怕了....真怕這種開發框架愈來愈多,老板都覺得寫網頁沒什麼了呢!

值得一提的是,django 在 runserver 之後,都會把程式碼 compile 成 pyc 檔,看起來效率應該還不錯,也許要等我多玩熟一點才能做些實驗囉。



你可能感兴趣的:(用 Python + django 10分鐘內作出一個 blog)