評估:DIY Django 迷你部落格
在本評估中,您將使用在Django Web 框架 (Python)模組中學習到的 Django 知識來建立一個非常基本的部落格。
| 先決條件 | 在嘗試此評估之前,您應該已經完成了本模組中的所有文章。 |
|---|---|
| 目標 | 測試對 Django 基礎知識的理解,包括 URL 配置、模型、檢視、表單和模板。 |
專案簡介
需要顯示的頁面、它們的 URL 和其他要求列在下面
| 頁面 | URL | 要求 |
|---|---|---|
| 首頁 | / 和 /blog/ |
描述網站的索引頁面。 |
| 所有部落格文章列表 | /blog/blogs/ |
所有部落格文章列表
|
| 部落格作者(博主)詳情頁面 | /blog/blogger/<author-id> |
指定作者(按 ID)的資訊及其部落格文章列表
|
| 部落格文章詳情頁面 | /blog/<blog-id> |
部落格文章詳情。
|
| 所有博主列表 | /blog/bloggers/ |
系統上所有博主的列表
|
| 評論表單頁面 | /blog/<blog-id>/create |
為部落格文章建立評論
|
| 使用者身份驗證頁面 | /accounts/<standard urls> |
用於登入、登出和設定密碼的標準 Django 身份驗證頁面
|
| 管理站點 | /admin/<standard urls> |
應啟用管理站點以允許建立/編輯/刪除部落格文章、部落格作者和部落格評論(這是博主建立新部落格文章的機制)
|
此外,您還應該編寫一些基本測試以驗證
- 所有模型欄位都具有正確的標籤和長度。
- 所有模型都具有預期的物件名稱(例如,
__str__()返回預期的值)。 - 模型具有單個部落格和評論記錄的預期 URL(例如,
get_absolute_url()返回預期的 URL)。 - BlogListView(所有部落格頁面)可在預期位置訪問(例如,/blog/blogs)
- BlogListView(所有部落格頁面)可在預期的命名 URL 處訪問(例如,“blogs”)
- BlogListView(所有部落格頁面)使用預期的模板(例如,預設模板)
- BlogListView 按 5 個分頁記錄(至少在第一頁上)
注意:當然,您可以執行許多其他測試。請自行判斷,但我們希望您至少進行上述測試。
以下部分顯示了實現上述要求的站點的螢幕截圖。
螢幕截圖
以下螢幕截圖提供了完成的程式應輸出內容的示例。
所有部落格文章列表
這顯示了所有部落格文章的列表(可從側邊欄中的“所有部落格”連結訪問)。需要注意的事項
- 側邊欄還列出了已登入的使用者。
- 各個部落格文章和博主都可以作為頁面中的連結訪問。
- 啟用了分頁(每組 5 個)。
- 排序順序為最新到最舊。
所有博主列表
這提供了所有博主的連結,這些連結是從側邊欄中的“所有博主”連結連結的。在這種情況下,我們可以從側邊欄看到沒有使用者登入。
部落格詳情頁面
這顯示了特定部落格的詳情頁面。
請注意,評論有日期和時間,並且按從最舊到最新的順序排序(與部落格排序相反)。最後,我們有一個連結,用於訪問新增新評論的表單。如果使用者未登入,我們將看到建議登入的提示。
新增評論表單
這是新增評論的表單。請注意,我們已登入。成功後,我們應該被帶回關聯的部落格文章頁面。
作者簡介
這顯示了博主的個人資訊以及他們的部落格文章列表。
完成步驟
以下部分描述了您需要執行的操作。
- 為站點建立一個骨架專案和 Web 應用程式(如Django 教程第 2 部分:建立骨架網站中所述)。您可以使用“diyblog”作為專案名稱,使用“blog”作為應用程式名稱。
- 為部落格文章、評論和任何其他需要的物件建立模型。在考慮設計時,請記住
- 每個評論只有一個部落格,但一個部落格可能有許多評論。
- 部落格文章和評論必須按釋出日期排序。
- 並非每個使用者都一定是部落格作者,儘管任何使用者都可能是評論者。
- 部落格作者還必須包含個人資訊。
- 為新模型執行遷移並建立超級使用者。
- 使用管理站點建立一些示例部落格文章和部落格評論。
- 為部落格文章和博主列表頁面建立檢視、模板和 URL 配置。
- 為部落格文章和博主詳情頁面建立檢視、模板和 URL 配置。
- 建立一個包含表單的頁面,用於新增新評論(請記住,這僅供已登入使用者使用!)。
提示和技巧
此專案與LocalLibrary教程非常相似。您可以使用幾乎相同的方法設定骨架、使用者登入/登出行為、靜態檔案支援、檢視、URL、表單、基本模板和管理站點配置。
一些常規提示
- 索引頁面可以實現為一個基本函式檢視和模板(就像 locallibrary 一樣)。
- 部落格文章和博主的列表檢視以及部落格文章的詳情檢視可以使用通用列表和詳情檢視建立。
- 特定作者的部落格文章列表可以透過使用通用部落格列表檢視並篩選與指定作者匹配的部落格物件來建立。
- 您將必須實現
get_queryset(self)來執行篩選(非常類似於我們的庫類LoanedBooksAllListView)並從 URL 中獲取作者資訊。 - 您還需要將作者的名稱傳遞到上下文中的頁面。要在基於類的檢視中執行此操作,您需要實現
get_context_data()(如下所述)。
- 您將必須實現
- “新增評論”表單可以使用基於函式的檢視(以及關聯的模型和表單)或使用通用
CreateView建立。如果您使用CreateView(推薦),則- 您還需要將部落格文章的名稱傳遞到上下文中的評論頁面(實現
get_context_data(),如下所述)。 - 該表單應僅顯示評論“描述”供使用者輸入(日期和關聯的部落格文章不可編輯)。由於它們不在表單本身中,因此您的程式碼需要在
form_valid()函式中設定評論的作者,以便可以將其儲存到模型中(此處所述 - Django 文件)。在同一個函式中,我們設定關聯的部落格。下面顯示了一個可能的實現(pk是從 URL/URL 配置中傳遞的部落格 ID)。pythondef form_valid(self, form): """ Add author and associated blog to form data before setting it as valid (so it is saved to model) """ #Add logged-in user as author of comment form.instance.author = self.request.user #Associate comment with blog based on passed id form.instance.blog=get_object_or_404(Blog, pk = self.kwargs['pk']) # Call super-class form validation behavior return super(BlogCommentCreate, self).form_valid(form) - 您需要提供一個成功 URL,在表單驗證後重定向到該 URL;這應該是原始部落格。為此,您需要覆蓋
get_success_url()並“反轉”原始部落格的 URL。您可以使用self.kwargs屬性獲取所需的部落格 ID,如上面的form_valid()方法中所示。
- 您還需要將部落格文章的名稱傳遞到上下文中的評論頁面(實現
我們在Django 教程第 6 部分:通用列表和詳情檢視主題中簡要討論了將上下文傳遞到基於類的檢視中的模板。為此,您需要覆蓋get_context_data()(首先獲取現有上下文,使用您想要傳遞到模板的任何其他變數更新它,然後返回更新後的上下文)。例如,以下程式碼片段顯示瞭如何根據其BlogAuthor ID 將博主物件新增到上下文中。
class SomeView(generic.ListView):
# …
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super(SomeView, self).get_context_data(**kwargs)
# Get the blogger object from the "pk" URL parameter and add it to the context
context['blogger'] = get_object_or_404(BlogAuthor, pk = self.kwargs['pk'])
return context
評估
此任務的評估可在 GitHub 上找到。此評估主要基於您的應用程式在多大程度上滿足了我們上面列出的要求,儘管評估的某些部分會檢查您的程式碼是否使用了適當的模型,以及您是否編寫了一些測試程式碼。完成後,您可以檢視完成的示例,該示例反映了一個“滿分”專案。
完成本模組後,您也完成了學習基本 Django 伺服器端網站程式設計的所有 MDN 內容!我們希望您喜歡本模組,並相信您已經很好地掌握了基礎知識!