如果您的數據有一個始終有效的約束,則應該在模型/數據庫級別(以及可選的表單級別)強制它。除了檢查驗證的表單之外,您的數據庫可以以多種方式輸入。例如,有人可以去django shell直接保存模型,或者有人可以在管理界面中創建/編輯模型,或者某些後來的設計者以某種方式創建一個新表單,但不能正確驗證。
授予如果有對數據附加的約束,這是僅需要。如果您使用正確的字段類型,Django將自動驗證諸如存儲正確值的字段等內容。例如,IntegerField
驗證以確保它包含整數,EmailField
檢查它是否以有效電子郵件地址的形式輸入,django.contrib.localflavor.us.models.PhoneNumberField
是美國電話號碼等。注意,只有當您的模型具有適當的字段(例如,if您使用CharField
s作爲電子郵件地址不能進行驗證
但是在數據結構之間可能存在其他的聯繫,您應該在其中編寫自己的驗證,例如,如果所有需要特殊指令的定製訂單(以及非定製訂單隻有有時會有特別的說明),你應該檢查執行所有自定義命令在特殊說明字段中有什麼東西(也許有一些最小長度)。
編輯:在回答您的編輯,在Django的三個潛在驗證的原因很簡單 - 在不同的原因不同位置有不同的驗證。
客戶端(javascript/jquery)驗證根本無法信任,只能作爲用戶使用時的便利(如果您想要一個平滑流暢的界面)。 AFAIK,django沒有JS驗證,除非你使用像django-ajax-forms之類的外部軟件包,但是你不相信驗證是正確的。其次,表單和模型驗證有所不同。一個模型可能有多種形式用於不同的目的。例如,您可能有一個評論模型的博客,並允許兩種類型的用戶評論:登錄用戶或匿名用戶。匿名用戶的表單可能需要在他們發表評論之前給出名稱/電子郵件,而登錄用戶的表單不需要這些字段。登錄用戶表單在視圖中處理時,可能會自動將登錄用戶的正確名稱和電子郵件地址添加到評論模型中,然後才能保存。
相比之下,模型驗證始終適用並且在數據庫級別始終爲真,無論他們如何嘗試保存數據。如果您想確保始終適用某些條件,請確保它處於數據庫級別。 (而且你不必寫這個驗證在表單級別)。
如果您需要任何嚴肅的指導,您需要張貼一些代碼。根據你的問題,現在沒有任何人可以真正告訴你。 – 2011-06-01 15:01:02