from django.shortcuts import render,HttpResponsefrom django import formsimport jsonimport refrom django.core.exceptions importValidationError# Create your views here.def mobile_validate(value):mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$')ifnot mobile_re.match(value):raiseValidationError('手機號碼格式錯誤')classInputForm(forms.Form):# 下面使用的變量名必須和html中input標簽的name值相同# forms 的字段類型包括:IntegerField,CharField,URLField,EmailField,DateField等,但是沒有手機號# required=True表示對輸入做驗證# error_messages 自定制提示信息username = forms.CharField(required=True, error_messages={'required':'用戶名不能為空'})password = forms.CharField(required=True,min_length=8,max_length=20,error_messages={'required':'密碼不能為空','min_length':'至少6位','max_length':'至多10位'})num = forms.IntegerField(error_messages={'required':'不能為空','invalid':'必須是數字'})# 自定制驗證方法關鍵就是參數validators,和自己的函數關聯起來phone = forms.CharField(validators=[mobile_validate,],)# django給標簽加sytle,關鍵參數widget ,forms.TextInput 表示生成type="text"的input標簽,改成Textarea則生成<textarea>標簽test = forms.CharField(widget=forms.TextInput(attrs={'class':'in_tmp'}))choice =((1,'北京'),(2,'上海'))t_choice = forms.IntegerField(widget=forms.Select(choices=choice))def login(request):if request.POST:objPost =InputForm(request.POST)ret = objPost.is_valid()if ret:print(objPost.clean())# else:# # from django.forms.utils import ErrorDict# print(type(objPost.errors),objPost.errors.as_json())return render(request,'login.html',{'data': objPost})else:objGet =InputForm()return render(request,'login.html',{'data': objGet})
login.html
<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>.error-msg{color:red;}.in_tmp{border:1px solid #6a34ff ;}</style></head><body><formaction="/login/"method="POST"><div><div>{{ data.username }}{% if data.errors.username %}<spanclass="error-msg">{{ data.errors.username.0 }}</span>{% endif %}</div><div>{{ data.password }}{% if data.errors.password %}<spanclass="error-msg">{{ data.errors.password.0 }}</span>{% endif %}</div><div>{{ data.num }}{% if data.errors.num %}<spanclass="error-msg">{{ data.errors.num.0 }}</span>{% endif %}</div><div>{{ data.phone }}{% if data.errors.phone %}<spanclass="error-msg">{{ data.errors.phone.0 }}</span>{% endif %}</div><div>{{ data.test }}{% if data.errors.test %}<spanclass="error-msg">{{ data.errors.test.0 }}</span>{% endif %}</div><div>{{ data.t_choice }}{% if data.errors.t_choice %}<spanclass="error-msg">{{ data.errors.t_choice.0 }}</span>{% endif %}</div><inputtype="submit"value="提交"/></div></form></body></html>
效果圖:
select 標簽顯示數據庫數據:
