Django的第一個例子:簡單的內容管理系統CMS

來源:互聯網
上載者:User

Diango是Python的一個Web開發架構。架構的目的是為了給開發提供方便,雖然剛開始學習時會覺得很麻煩。正在看的書是《Practical Django Projects》。


一個例子是一個簡單的內容管理系統CMS(Contents Management
System)。Django最初就是在某個新聞網站開發的,為了方便該網站的內容管理(新聞的編輯、發布,等等)。簡單說,CMS應包括許可權管理、頁面
編輯、發布。完成這些事情離不開資料庫的支援。第一個例子為簡單起見,採用SQLite資料庫。

假定Django安裝到C:/Python26/Lib/site-packages/django。首先要為CMS建立一個project,不妨命名為cms,用Django的指令碼django-admin.py完成此任務。到選定的工程目錄下,執行以下命令

python C:/Python26/Lib/site-packages/django/bin/django-admin.py
startproject
cms

將為工程建立一個名為cms的子目錄,裡麵包括一些工程需要的基本檔案,如__init__.py、manage.py、settings.py、urls.py。

運行manage.py指令碼(python manage.py
runserver
),
可以啟動一個簡單的Web Server,在瀏覽器上輸入“http://127.0.0.1:8000/”可串連到此Web
Server。(實際上,manage.py內部只是調用了django.core.management的execute_manager()函數,本
工程的settings作為參數傳遞給函數)

settings.py儲存工程的配置資訊,urls.py定義URLs到實現代碼的映射。

資料庫的串連資訊就儲存在settings.py中(DATABASES =
)。Django工程是一組由Django支撐的應用,一些常見的應用情境已經定製在Django中。哪些應用要安裝到此項目中,也要在
settings.py中定義(INSTALLED_APPS = ),一個項目預設會包括下面的應用:
    'django.contrib.auth',          # 做身分識別驗證
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',         # 管理多個Web網站,發布項與網站的對應關係
    'django.contrib.messages',

對於CMS項目,還需要另外兩個應用:
    'django.contrib.admin',         # 提供網站管理介面
    'django.contrib.flatpages',    

flatpages應用用來為簡單頁面
提供資料模型,包括標題、內容、該頁對應的URL,等等,對應資料庫表為django_flagpage。

python manage.py
syncdb

將建立工程需要的資料庫。具體實現為:尋找安裝的應用列表,找到每個應用的資料模型(model.py),資料模型中有對應的資料庫表定義;資料庫建立
後,Django找到每個應用的初始化代碼並執行,例如,django.contrib.auth的初始化代碼提示你建立一個使用者帳號;向資料庫表中插入
必要的初始資料。

urls.py中定義URL的匹配模式,以及每種模式對應的view(Python函數,對HTTP請求做出響應)、或者是一個include,重用其他URL配置定義來處理此處的模式。匹配模式採用Regex定義。比如:
    (r'^admin/', include(admin.site.urls)), 
    (r'', include('django.contrib.flatpages.urls')), # 所有不與上面匹配的regex,都與此模式比對

第一條模式定義表示:當用 http://127.0.0.1:8000/admin/
串連Web伺服器時,將出現一個登入頁面。用執行syncdb時建立的使用者賬戶登入,將進入到網站管理頁面,可以在此處增加使用者/組、增加網站、增加簡單
頁面:django.contrib.auth為使用者和組操作提供資料模型,django.contrib.sites為網站管理提供資料模
型,flatpages為簡單頁面管理提供資料模型。

在此處點擊“增加簡單頁面”,只是在資料庫中儲存了簡單頁面的定義(這正是資料模
型,或者說urls.py,做的工作),但這樣的簡單頁面在瀏覽器顯示時究竟是怎樣的布局?還需要定義出顯示模板
(Template),'django.contrib.flatpages'預設地去尋找模板檔案 flatpages/default.html。

重複一遍。如果要一個頁面正常顯示,需要做兩項工作:一,在urls.py中定義URL的匹配模式(及相應的資料模型);二,定義相應的顯示模板。

1. (r'', include('django.contrib.flatpages.urls')) 定義了處理簡單頁面的資料模型(這裡採用了通配的regex)
2. 在flatpages子目錄下建立default.html檔案,作為頁面的顯示模板

Django
的模板系統力圖達到兩個目標:1)在模板中允許的代碼盡量最少,以避免程式邏輯混入模板中;2)不採用某種特殊的標註語言如XML。模板檔案中提供兩個機
制,Variables 以及
Tags。Variable是一個預留位置,其實際內容由應用的資料模型從資料庫表中查詢然後填入。Tag可做幾乎任何事情,其實際效果依賴於特定的
Tag,開發人員可以定義自己的Tag完成特定任務。

模板檔案的最終輸出是普通的HTML檔案,這個檔案提供給瀏覽器。模板檔案的定義可以
儲存在:1)settings.py中TEMPLATE_DIRS規定的目錄中;2)在安裝的應用中,如果任何一個包含子目錄 templates/
。模板檔案最好儲存在與代碼分開的地方,以體現程式邏輯與頁面展示的分離。

一個樣本的模板檔案如下(雙花括弧中是模板中的變數):

<html>
  <head>
    <title>{{flatpage.title}}</title>
  </head>
 
  <body>
    <h1>{{flatpage.title}}</h1>
    {{flatpage.content}}
  </body>
</html>

與MVC(Model-View-Controller)略有區別,Django的模式通常稱為MTV(Model-Template-View).

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.