Python console
from app01 import views
from_obj = views.MyForm({'username':'zyb','password':'123','email':'666'})
from_obj.is_valid()
False
from_obj.cleaned_data
{'username': 'zyb', 'password': '123'}\
from django import forms
from django.core.validators import RegexValidator
class MyForm(forms.Form):
# username字符串类型最小3位 最大8位
username = forms.CharField(min_length=3,max_length=8,label='用户名',error_messages={'min_length':'用户名最少三位','required':'用户名不能为空'})
password = forms.CharField(min_length=3,max_length=8,label='密码')
confirm_password = forms.CharField(min_length=3,max_length=8,label='密码')
email = forms.EmailField(label='邮箱',error_messages={'invalid':'邮箱格式不正确','required':'邮箱不能为空'})
phone = forms.Charfield(validators=[RegexValidator(r'^[0-9]+$','请输入数字'),RegexValidator(r'^[0-9]+$','请输入数字'),····])
# 钩子函数
# 局部钩子
def clean_username(self):
username = self.cleaned_data.get('username')
if '666' in username:
# 提示错误信息
self.add_error('username','不能含有666')
# 将钩子函数勾出来的数据再放回去
return username
# 全局钩子
def clean(self):
password = self.cleaned_data.get('password')
confirm_password = self.cleaned_data.get('confirm_password')
if not confirm_password == password:
self.add_error('confirm_password','两次密码不一致')
return self.cleaned_data # 返回所有数据
def index(request):
form_obj = MyForm()
if request.method == 'POST':
form_obj = MyForm(request.POST)
if form_obj.is_valid():
return HttpResponse('ok')
return render(request,'index.html',locals())
label 字段名
error_messsage 自定义报错信息
initial 默认值
required 是否必填
针对不同input修改:widget=forms.widgets.PasswordInput(attrs={'class':'form-control c1 c2','value':'123'})