Hướng dẫn Django - Python - Day 8: Django Form Validation
Hướng dẫn Django - Python - Day 8: Django Form Validation
Trong bài này chúng ta sẽ kiểm tra thông tin nhập vào Form theo 3 điều kiện sau:
- Kiểm tra trường trống - không nhập dữ liệu
- Kiểm tra "bot" - dữ liệu nhập tự động
- Kiểm tra việc xóa dữ liệu sau khi nhập xong.
1. Kiểm tra "bot"
Để tránh việc người dùng refresh spam dữ liệu liên tục ta cần có điều kiện bằng việc thêm đoạn code sau bên dưới file forms.py hiện tại:
Trong đó: botcatccher là biến để phát hiện bot, sử dụng phương thức hiddeniput, tức là phần input sẽ không có trong form.
Ta sử dụng hàm clean_botcatcher để phát hiện ra lỗi của bot.
2. Kiểm tra số lượng kí tự nhập ta thay biến botcatcher như sau:
Nếu muốn đặt điều kiện cho các trường nhập. Ví dụ, ta đặt điều kiện trường Name phải bắt đầu bằng chữ z ta sửa file forms.py như sau:
Trong đó: Hàm check_for_z sẽ thiết lập điều kiện trường Name phải có chữ z đầu tiên. Ta đẩy điều kiện này vào biến name trong class FormName bên dưới. Ta vẫn sử dụng validators để kiểm tra điều kiện.
3. Kiểm tra email xác nhận
Để kiểm tra email xác nhận ta sửa code trong file forms.py như sau:
Trong đó: ta tạo thêm một biến verify_email để nhập lại email; sau đó ta có hàm clean(self) để check tất cả dữ liệu vừa nhập. Ta lấy tất cả dữ liệu nhập vào mảng all_clean_data bằng phương thức super().clean(). Sau đó lấy ra 2 dữ liệu email và vemail của mảng all_clean_data. So sánh chúng với nhau để báo lỗi.
Trong bài này chúng ta sẽ kiểm tra thông tin nhập vào Form theo 3 điều kiện sau:
- Kiểm tra trường trống - không nhập dữ liệu
- Kiểm tra "bot" - dữ liệu nhập tự động
- Kiểm tra việc xóa dữ liệu sau khi nhập xong.
1. Kiểm tra "bot"
Để tránh việc người dùng refresh spam dữ liệu liên tục ta cần có điều kiện bằng việc thêm đoạn code sau bên dưới file forms.py hiện tại:
botcatcher = forms.CharField(required = False, widget =
forms.HiddenInput)
def clean_botcatcher(self):
botcatcher = self.cleaned_data['botcatcher']
if len(botcatcher) > 0:
raise forms.ValidationError("GOTCHA BOT")
return botcatcher
Trong đó: botcatccher là biến để phát hiện bot, sử dụng phương thức hiddeniput, tức là phần input sẽ không có trong form.
Ta sử dụng hàm clean_botcatcher để phát hiện ra lỗi của bot.
2. Kiểm tra số lượng kí tự nhập ta thay biến botcatcher như sau:
botcatcher = forms.CharField(required = False, widget =
forms.HiddenInput, validators = [validators.MaxLengthValidator(0)])
Nếu muốn đặt điều kiện cho các trường nhập. Ví dụ, ta đặt điều kiện trường Name phải bắt đầu bằng chữ z ta sửa file forms.py như sau:
from django import forms
from django.core import validators
def check_for_z(value):
if value[0].lower() != "z":
raise forms.ValidationError(" Name Need to start with z")
class FormName(forms.Form):
name = forms.CharField(validators = [check_for_z])
email = forms.EmailField()
text = forms.CharField(widget = forms.Textarea)
botcatcher = forms.CharField(required = False,
widget = forms.HiddenInput,
validators = [validators.MaxLengthValidator(0)])
Trong đó: Hàm check_for_z sẽ thiết lập điều kiện trường Name phải có chữ z đầu tiên. Ta đẩy điều kiện này vào biến name trong class FormName bên dưới. Ta vẫn sử dụng validators để kiểm tra điều kiện.
3. Kiểm tra email xác nhận
Để kiểm tra email xác nhận ta sửa code trong file forms.py như sau:
from django import forms
from django.core import validators
class FormName(forms.Form):
name = forms.CharField()
email = forms.EmailField()
verify_email = forms.EmailField(label = "Enter your
email again!")
text = forms.CharField(widget = forms.Textarea)
def clean(self):
all_clean_data = super().clean()
email = all_clean_data['email']
vemail = all_clean_data['verify_email']
if email != vemail:
raise forms.ValidationError("Make sure email match!")
Trong đó: ta tạo thêm một biến verify_email để nhập lại email; sau đó ta có hàm clean(self) để check tất cả dữ liệu vừa nhập. Ta lấy tất cả dữ liệu nhập vào mảng all_clean_data bằng phương thức super().clean(). Sau đó lấy ra 2 dữ liệu email và vemail của mảng all_clean_data. So sánh chúng với nhau để báo lỗi.
Làm thế nào để chat vs a v? em cần sự giúp đỡ ạ
Trả lờiXóa