我剛開始對我的一個項目使用Pyramid,並且我需要通過獲取表單字段值並進行Web服務調用以確認值的正確性,以驗證表單域輸入。例如,有一個字段叫做你的銀行的CUSTOMER-ID。我需要將(單獨)作爲輸入,並通過發出Web服務調用(如http://someotherdomain/validate_customer_id/?customer_id=<input_value>
)讓服務器級別進行驗證。哪一個是表單驗證的正確方法? Colander的Schema驗證或Deform的表單驗證?
我對錶單模式管理使用Colander,對於所有表單驗證邏輯使用Deform。我很困惑我需要在CUSTOMER-ID情況下放置我的驗證邏輯。是否在MySchema().bind(customer_id=<input_value>)
(它有一個延遲驗證器查詢Web服務)或者form.validate(request.POST.items())?如果我採用延遲驗證程序的路徑,則MySchema().bind
對於錯誤的CUSTOMER-ID正在引發colander.Invalid
錯誤。沒關係。但是這個錯誤並不在表單層面,而是在模式層面。那麼我怎麼會以一種理智的方式告訴用戶這件事?
我對Django窗體有很好的使用經驗,所以我期待着像clean
這樣的方法。像表單['customer_id']。錯誤是我期望在模板級別。金字塔的Deform或Colander可能嗎?
謝謝。現在很清楚。但是,如果模式驗證失敗,我將如何報告這種錯誤?就像告訴用戶「輸入無效的CUSTOMER_ID」一樣?因爲它們處於兩個不同的層次。 –
這是一個非常好的答案。 +1 –
@漏洞在生態系統中,您想要更改的消息在驗證器級別定義,即https://github.com/Pylons/colander/blob/master/colander/__init__.py#L314。當你實例化他們時,他們中的一些人接受「消息」kwarg,有些則不。 – JayD3e