2018.12.21 Class274驗證器的例項
阿新 • • 發佈:2019-01-08
章節13
課時274
【後端開發】釋出新聞功能完成
實際開發中的登入驗證器
#froms.py #encoding: utf-8 from django import forms from apps.forms import FormMixin from django.core.cache import cache from .models import User class LoginForm(forms.Form,FormMixin): telephone = forms.CharField(max_length=11) password = forms.CharField(max_length=20,min_length=6,error_messages={"max_length":"密碼最多不能超過20個字元!","min_length":"密碼最少不能少於6個字元!"}) remember = forms.IntegerField(required=False)
上面的LoginForm的類是讓HTML驗證使用者的登入賬號和密碼。屬於後端的登入驗證。這裡的作用是,前端客戶輸入資料時,後端呼叫資料庫進行配對。
class RegisterForm(forms.Form,FormMixin): telephone = forms.CharField(max_length=11) username = forms.CharField(max_length=20) password1 = forms.CharField(max_length=20, min_length=6, error_messages={"max_length": "密碼最多不能超過20個字元!", "min_length": "密碼最少不能少於6個字元!"}) password2 = forms.CharField(max_length=20, min_length=6, error_messages={"max_length": "密碼最多不能超過20個字元!", "min_length": "密碼最少不能少於6個字元!"}) img_captcha = forms.CharField(min_length=4,max_length=4) sms_captcha = forms.CharField(min_length=4,max_length=4) def clean(self): cleaned_data = super(RegisterForm, self).clean() password1 = cleaned_data.get('password1') password2 = cleaned_data.get('password2') if password1 != password2: raise forms.ValidationError('兩次密碼輸入不一致!') img_captcha = cleaned_data.get('img_captcha') cached_img_captcha = cache.get(img_captcha.lower()) if not cached_img_captcha or cached_img_captcha.lower() != img_captcha.lower(): raise forms.ValidationError("圖形驗證碼錯誤!") telephone = cleaned_data.get('telephone') sms_captcha = cleaned_data.get('sms_captcha') cached_sms_captcha = cache.get(telephone) if not cached_sms_captcha or cached_sms_captcha.lower() != sms_captcha.lower(): raise forms.ValidationError('簡訊驗證碼錯誤!') exists = User.objects.filter(telephone=telephone).exists() if exists: forms.ValidationError('該手機號碼已經被註冊!') return cleaned_data
這裡是重寫了整個驗證規則,從def clean開始就是把django的forms,moudels重寫了,用來驗證手機驗證碼,驗證圖片,最後是驗證客戶是否存在
自定義驗證:
有時候對一個欄位驗證,不是一個長度,一個正則表示式能夠寫清楚的,還需要一些其他複雜的邏
輯,那麼我們可以對某個欄位,進行自定義的驗證。比如在註冊的表單驗證中,我們想要驗證手機
號碼是否已經被註冊過了,那麼這時候就需要在資料庫中進行判斷才知道。