2011-10-28 20 views
2

我應該在我的視圖代碼中編寫應用程序邏輯嗎?例如,在提交表單元素時,我需要創建一個用戶並向他發送激活電子郵件。這是從視圖函數做的事,還是我應該創建一個單獨的函數,以便於測試路線? Django在這裏推薦什麼?視圖代碼中的應用程序邏輯

回答

6

我發現很難弄清楚當我開始使用django時,一切都會如何。這真的取決於你正在寫的邏輯類型。

首先開始與模型:模型的方法和管理人員進行行級邏輯和表級的邏輯即模型管理器將編寫代碼來獲取相關聯的類別列表的好地方的好地方與所有博客帖子。模型方法是計算特定博客帖子中字符的好地方。

視圖級別邏輯應該處理將它們放在一起 - 接受請求,執行必要的步驟以獲得所需的結果(可能使用模型管理器),然後爲模板做好準備。

如果有代碼不適合其他地方,但有一個邏輯結構,你可以簡單地編寫一個模塊來執行它。同樣,如果您認爲不屬於的代碼碎片,請保留utils.py來保存它們。

你不應該在你的模板中真正執行任何邏輯 - 如果你必須使用模板標籤。這些對於使用可重複使用的代碼片段來說很好,它們在每個請求週期中都不需要,也不需要一個請求週期 - 您可能希望它們位於子網站中(即在網站的博客部分顯示類別列表)

如果您確實希望在每個請求週期中執行一些邏輯,請使用上下文處理器或中間件。如果你只想在一個請求週期內執行一些邏輯,視圖可能就是這個地方。

TLDR:在你看來寫作的邏輯是好的,但也有很多,可能是更合適的

2

將註冊碼分離到它自己的函數中以使測試更容易是一個很好的理由。如果您允許管理員在單獨的私人視圖中註冊用戶,那麼註冊功能將更加乾燥。就個人而言,我不認爲代碼中的一點應用程序邏輯會造成很大的傷害。

您可能會發現它啓發看看在django-registration應用程序的註冊視圖 - 只是爲了看看它是怎麼寫的,我不是說你應該或必須使用它。它將用戶註冊封裝到自己的函數中(還有一個間接級別,因爲註冊後端是可插入的)。

+1

+1地方。我正在寫回應,並意識到這基本上就是你說的。這篇文章最有意義 - 乾脆就幹。如果這是發生給定操作的唯一位置,請將其保存在視圖中!如果沒有,將它放在其他地方並將其導入到視圖中。簡單。 –