表單驗證 -- Constraints

在輸入資料時,有時候我們需要一些驗證動作,做為防呆設計,這時候,我們需要設計一個驗證器(Validators)

驗證器有二種方式,欄位驗證(Field-level validation)及表單驗證(Form-level validation)

欄位驗證適合單純對某個欄位的內容進行測試,例如檢查上傳的圖片尺寸

表單驗證則可以對完成的表單內容做企業邏輯的比對,例如當員工職稱為「秘書」時,其薪資上限為40,000,則新增一筆員工資料,我們可以檢查是否有輸入錯誤(如職稱為秘書,但薪資卻輸入為400000)

本篇以欄位驗證(Field-level validation)為例,欄位驗證(Field-level validation)又稱Constraints,即對欄位內容進行限制,在Dexterity的content type程式中,匯入模組

from zope.interface import invariant, Invalid

然後,在 interface class之上,輸入驗證器程式碼,以檢查圖檔尺寸為例,如下

def checkImage(data):
    if data._width != 100 or data._height != 100:
        raise Invalid(_(u"Constraints size: 100X100 px"))
    return True

接著,在 interface calss 中,所要被驗證的欄位image中,加入 constraint=checkImage, 這一行,如下

    image = NamedBlobImage(
        title=_(u'Lead Image'),
        description=_(u"Upload a Image of Size 100x100."),
        constraint=checkImage,
    )

完成,網站重啟後即可進行欄位驗證,若使用者上傳圖檔尺寸不是 100X100,則為回傳錯誤訊息!