TurboGears - Xác thực
Một thư viện widget Biểu mẫu tốt phải có tính năng xác thực đầu vào. Ví dụ: người dùng phải nhập dữ liệu vào trường bắt buộc hoặc xác minh xem trường email có chứa email hợp lệ hay không mà không cần dùng đến bất kỳ phương tiện lập trình nào khác (như hàm JavaScript) để xác thực.
Các phiên bản đầu tiên của ToscaWidgets Forms Library được sử dụng để dựa vào mô-đun FormEncode để hỗ trợ xác thực. ToscaWidgets2 hiện có hỗ trợ xác thực tích hợp sẵn trong mô-đun tw2.core. Tuy nhiên, vẫn có thể sử dụng các kỹ thuật xác nhận FormEncode.
Để xác thực biểu mẫu ToscaWidgets, @validate decorator được sử dụng.
@validate(form, error_handler, validators)
Các ’form’ là đối tượng biểu mẫu ToscaWidgets cần được xác thực.
Các ‘error-handler’ là phương thức bộ điều khiển được sử dụng để xử lý các lỗi biểu mẫu.
Các ‘validators’ là một đối tượng từ điển chứa trình xác thực FormEncode.
Các loại trình xác thực
Mô-đun tw2.core chứa một lớp trình xác thực mà các trình xác thực khác được kế thừa. Cũng có thể thiết kế trình xác nhận tùy chỉnh dựa trên nó. Một số trình xác thực quan trọng được mô tả dưới đây:
LengthValidator- Kiểm tra xem một giá trị có độ dài quy định hay không. Giới hạn tối thiểu và tối đa được xác định với các tham số tối thiểu và tối đa. Thông báo tùy chỉnh cho độ dài dưới và trên tối thiểu và tối đa có thể được chỉ định dưới dạng tham số tooshort và toolong.
tw2.core.LengthValidator(min = minval, max = maxval,
msgs = { 'tooshort': (‘message for short length’),
'toolong': (‘message for long length)})
RangeValidator- Thường được sử dụng cùng với RangeField. Nó hữu ích để xác thực giá trị của một trường số trong giới hạn tối thiểu và tối đa. Thông báo cho các tham số tooshort và toolong có thể được tùy chỉnh.
tw2.core.RangeValidator(min = minval, max = maxval,
msgs = { 'tooshort': (‘message for short length’),
'toolong': (‘message for long length)})
IntValidator- Lớp này có nguồn gốc từ RangeValidator. Điều này thường được sử dụng để xác thực nếu đầu vào trong trường văn bản bình thường chứa dữ liệu số nguyên. Có thể đặt giới hạn tối thiểu và tối đa cũng như thông báo lỗi. Ngoài ra, thông báo lỗi cho đầu vào không phải là số nguyên có thể được chỉ định dưới dạng tham số 'notint'.
tw2.core.IntValidator(msgs = {‘notint’:’Must be Integer’})
OneOfValidator - Trình xác thực này buộc người dùng chỉ chọn một giá trị từ các tùy chọn có sẵn trong danh sách.
tw2.core.OneOfValidator(values = [option1, option2,..],
msgs = {‘notinlist’:’Not in List’}}
DateValidator- Rất hữu ích để đảm bảo rằng đầu vào của người dùng là ngày hợp lệ. Định dạng ngày (mặc định là YMD) và thông báo lỗi có thể tùy chỉnh. Giới hạn ngày tối thiểu và tối đa cũng có thể được chỉ định. DateTimeValidator cũng có sẵn để xác minh đối tượng của lớp DateTime.
tw2.core.DateValidator(msgs = {format = ’%Y-%m-%d’,
'baddatetime': ('baddate', ('Must follow date format $format_str'))}
EmailValidator- Xác thực đầu vào của người dùng với một địa chỉ email hợp lệ. Lớp này được kế thừa từ một RegexValidator tổng quát hơn.
tw2.core.EmailValidator(msgs = {'badregex': ('bademail',
('Must be a valid email address')) }
UrlValidator- Lớp này cũng được kế thừa từ RegexValidator. Nó xác thực đầu vào của người dùng cho một URL hợp lệ.
tw2.core.UrlValidator(msgs = {'badregex': ('badurl', ('Must be a valid URL’)) }
MatchValidator- Xác nhận xem giá trị của một trường có khớp với trường kia hay không. Điều này đặc biệt hữu ích, khi người dùng được yêu cầu chọn và xác nhận trường mật khẩu. Cách sử dụng điển hình của MatchValidator được hiển thị bên dưới:
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()
Cũng có thể xây dựng một trình xác thực phức hợp, trong đó việc xác thực được mong muốn thành công, nếu bất kỳ kiểm tra nào vượt qua. Trong các trường hợp khác, bạn có thể muốn xác thực thành công, chỉ khi đầu vào vượt qua tất cả các lần kiểm tra. Đối với điều này, tw2.core cung cấp trình xác thực Bất kỳ và Tất cả, là các lớp con của CompoundValidator có thể mở rộng.