表單
表單可以驗證輸入,也可以生成html
<form action="/user_list/" method="post">
<p>用戶類型:` obj`.`user_type `
<span>{% error_message errors.user_type %}</span>
</p>
<p>主機:` obj`.`host `
<span>{% error_message errors.host %}</span>
</p>
<p>端口:` obj`.`port ` <span>` errors`.`port `</span></p>
<p>郵箱:` obj`.`email ` <span>` errors`.`email `</span></p>
<p>手機:` obj`.`mobile ` <span>` errors`.`mobile `</span></p>
<p>備註:` obj`.`memo ` <span>` errors`.`memo `</span></p>
<input type="submit" value="submit" />
</form>
#z自定義匹配類型
def mobile_validate(value):
mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$')
if not mobile_re.match(value):
raise ValidationError('手機號碼格式錯誤')
#創建一個繼承Form的類
class UserInfo(forms.Form):
user_type_choice = (
(0, u'普通用戶'),
(1, u'高級用戶'),
)
user_type = forms.IntegerField(widget=forms.widgets.Select(choices=user_type_choice,
attrs={'class': "form-control"}))
email = forms.EmailField(error_messages={'required': u'郵箱不能爲空'}) #自定義表單錯誤提示
host = forms.CharField(error_messages={'required': u'主機不能爲空'})
port = forms.CharField(error_messages={'required': u'端口不能爲空'})
mobile = forms.CharField(validators=[mobile_validate, ], #調用自己定義的匹配函數
error_messages={'required': u'手機不能爲空'},
widget=forms.TextInput(attrs={'class': "form-control", #添加標籤屬性
'placeholder': u'手機號碼'}))
memo = forms.CharField(required=False,
widget=forms.Textarea(attrs={'class': "form-control",
'placeholder': u'備註'})
)
#前端提交數據處理函數
def user_list(request):
obj = UserInfo()
if request.method == "POST":
user_input_obj = UserInfo(request.POST)
if user_input_obj.is_valid():
data = user_input_obj.clean()
print data
else:
error_msg = user_input_obj.errors.as_data()
return render(request, 'user_list.html', {'obj': user_input_obj, 'errors': error_msg})
return render(request, 'user_list.html', {'obj': obj})