TurboGears – 驗證



一個好的表單小部件庫應該具有輸入驗證功能。例如,應該強制使用者在必填欄位中輸入資料,或者驗證電子郵件欄位是否包含有效的電子郵件,而無需使用任何其他程式設計方法(如 JavaScript 函式)進行驗證。

早期版本的 ToscaWidgets 表單庫依賴於 FormEncode 模組來支援驗證。ToscaWidgets2 現在在 tw2.core 模組中提供了內建的驗證支援。但是,仍然可以使用 FormEncode 驗證技術。

為了使 ToscaWidgets 表單進行驗證,使用 @validate 裝飾器。

@validate(form, error_handler, validators)
  • “form” 是要驗證的 ToscaWidgets 表單物件。

  • “error-handler” 是用於處理表單錯誤的控制器方法。

  • “validators” 是一個包含 FormEncode 驗證器的字典物件。

驗證器型別

tw2.core 模組包含一個驗證器類,其他驗證器都是從此類繼承而來。也可以基於此設計自定義驗證器。下面描述了一些重要的驗證器:

LengthValidator – 檢查值是否具有規定的長度。最小和最大限制由 min 和 max 引數定義。長度低於和高於 min 和 max 的自定義訊息可以分別指定為 tooshort 和 toolong 引數。

tw2.core.LengthValidator(min = minval, max = maxval, 
   msgs = { 'tooshort': (‘message for short length’), 
   'toolong': (‘message for long length)})

RangeValidator – 通常與 RangeField 一起使用。它用於驗證數值欄位的值是否在最小和最大限制範圍內。tooshort 和 toolong 引數的訊息可以自定義。

tw2.core.RangeValidator(min = minval, max = maxval, 
   msgs = { 'tooshort': (‘message for short length’), 
   'toolong': (‘message for long length)})

IntValidator – 此類派生自 RangeValidator。這通常用於驗證普通文字欄位中的輸入是否包含整數資料。可以設定最小和最大限制以及錯誤訊息。此外,非整數輸入的錯誤訊息可以指定為“notint”引數。

tw2.core.IntValidator(msgs = {‘notint’:’Must be Integer’})

OneOfValidator – 此驗證器強制使用者只能從列表中的可用選項中選擇一個值。

tw2.core.OneOfValidator(values = [option1, option2,..], 
   msgs = {‘notinlist’:’Not in List’}}

DateValidator – 非常有用,可以確保使用者輸入的日期有效。日期格式(預設為 Y-M-D)和錯誤訊息可自定義。還可以指定最小和最大日期限制。DateTimeValidator 也可用於驗證 DateTime 類的物件。

tw2.core.DateValidator(msgs = {format = ’%Y-%m-%d’, 
   'baddatetime': ('baddate', ('Must follow date format $format_str'))}

EmailValidator – 根據有效的電子郵件地址驗證使用者輸入。此類繼承自更通用的 RegexValidator。

tw2.core.EmailValidator(msgs = {'badregex': ('bademail', 
   ('Must be a valid email address')) }

UrlValidator – 此類也繼承自 RegexValidator。它驗證使用者輸入的 URL 是否有效。

tw2.core.UrlValidator(msgs = {'badregex': ('badurl', ('Must be a valid URL’)) }

MatchValidator – 確認一個欄位的值是否與另一個欄位匹配。這在需要使用者選擇和確認密碼欄位的情況下特別有用。下面顯示了 MatchValidator 的典型用法:

import tw2.core as twc
import tw2.forms as twf
  
  class AdmissionForm(twf.Form):
      class child(twf.TableLayout):
         validator = twc.MatchValidator('pw', 'pwconfirm')
         pw = twf.PasswordField()
         pwconfirm = twf.PasswordField()

也可以構造一個複合驗證器,如果任何一個檢查透過,則希望驗證成功。在其他情況下,您可能希望僅當輸入透過所有檢查時驗證才成功。為此,tw2.core 提供了 Any 和 All 驗證器,它們是可擴充套件的 CompoundValidator 的子類。

廣告

© . All rights reserved.