image.png
一、切入點(diǎn)使用form
讓頁(yè)面生成寫(xiě)好的表單购撼,從form切入跪削,注冊(cè)用戶(hù)名,昵稱(chēng)份招,密碼切揭,確認(rèn)密碼,郵箱锁摔,驗(yàn)證碼
-
常用的函數(shù)
-
{{obj_register.non_field_errors.0}}顯示all
-
from django.core.validators import RegexValidator用來(lái)寫(xiě)正則的
-
from django.core.exceptions import ValidationError用來(lái)捕獲clean異常的
-
from django import forms 用來(lái)繼承的
-
from django.forms import fields 用來(lái)調(diào)用字段的
-
from django.forms import widgets 用來(lái)引入頁(yè)面插件的
-
注意點(diǎn)
-
驗(yàn)證碼判斷
首先我們將驗(yàn)證是儲(chǔ)存在session中廓旬,而session是在request中,這里我們需要構(gòu)造一個(gè)繼承的函數(shù)谐腰,給我們form表單函數(shù)加入一個(gè)屬性
class Base(object):
def __init__(self,request,*args,**kwargs):
self.request = request
super(Base,self).__init__(*args,**kwargs)
-
clean_name 重寫(xiě)
- 用戶(hù)名孕豹、郵箱、判斷是結(jié)合數(shù)據(jù)庫(kù)查找判斷是否存在
- 驗(yàn)證碼是去session判斷
-
多字段判斷clean
- 判斷兩次輸入的密碼是否正確使用clean
當(dāng)我們想給某個(gè)字段加上額外的判斷時(shí)候十气,一定要重寫(xiě)clean_name -
widgets.TextInput 為標(biāo)簽屬性賦值
-
widgets.CheckboxInput({'value':"0"})励背,checkbox設(shè)置
from django import forms
from django.forms import fields
from django.core.validators import RegexValidator
from .base import Base
from repository import models
from django.core.exceptions import ValidationError
from django.forms import widgets
class accountform(Base,forms.Form):
username = fields.CharField(
label= "用名",
widget= widgets.TextInput(attrs={'class':'form-control'}),
validators=[RegexValidator(r'^[a-zA-Z0-9_-]{4,16}$','4到16位(字母,數(shù)字砸西,下劃線(xiàn)叶眉,減號(hào))')],
error_messages = {'required':'不能為空',}
)
nickname = fields.CharField(
label="昵稱(chēng)",
widget=widgets.TextInput(attrs={'class': 'form-control'}),
validators=[RegexValidator(r'^[a-zA-Z0-9_-]{4,16}$', '4到16位(字母址儒,數(shù)字,下劃線(xiàn)衅疙,減號(hào))')],
error_messages={'required': '不能為空', }
)
password = fields.CharField(
label="密碼",
widget=widgets.PasswordInput(attrs={'class': 'form-control'}),
validators=[RegexValidator(r'^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$','以字母開(kāi)頭莲趣,字母,數(shù)字饱溢,減號(hào)喧伞,下劃線(xiàn)')]
,error_messages = {'required': '不能為空', }
)
confirm_password = fields.CharField(
label="密碼",
widget=widgets.PasswordInput(attrs={'class': 'form-control'}),
validators=[RegexValidator(r'^[a-zA-Z]([a-zA-Z0-9]{5,19})+$', '以字母開(kāi)頭,字母绩郎,數(shù)字潘鲫,減號(hào),下劃線(xiàn)')]
,error_messages = {'required':'不能為空',}
)
email = fields.EmailField(
label="郵箱",
widget=widgets.TextInput(attrs={'class': 'form-control'}),
error_messages={'inisvalid':'請(qǐng)輸入正確的郵箱','required':'郵箱不能為空'})
check_code = fields.CharField(
label="驗(yàn)碼",
error_messages={'required':'驗(yàn)證碼不能為空'}
)
# avatar_img = fields.ImageField(
# label="頭像",
# error_messages={'invalid_image':"請(qǐng)上傳圖片類(lèi)型",'required':'不能為空'}
# )
def clean_username(self):
v = self.cleaned_data['username']
have_name = models.UserInfo.objects.filter(username=v).count()
if have_name:
raise ValidationError('用戶(hù)名存在')
return v
def clean_email(self):
v = self.cleaned_data['email']
has_email = models.UserInfo.objects.filter(email=v).count()
if has_email:
raise ValidationError('郵箱存在')
return v
def clean_check_code(self):
v = self.cleaned_data['check_code']
if self.request.session.get('CheckCode').upper() != v.upper():
raise ValidationError('驗(yàn)證碼錯(cuò)誤')
return v
def clean(self):
value_dict = self.cleaned_data
paw = value_dict.get('password')
con_pax = value_dict.get('confirm_password')
print(paw)
if paw != con_pax:
raise ValidationError('密碼不一致')
return value_dict