Form中的字段
CharField 字符串
EmailField email
GenericIPAddressField IP
Form字段参数
requred=True 必填
error_messages 自定义错误信息
字段参数取值:
1、required:用户名值不为空 -----》 'required':('ip地址不能为空')
2、invalid: IP格式错误 ---------》 'invalid':('ip格式错误')
class Alongin(forms.Form):
username=forms.CharField(max_length=30)
email=forms.EmailField(required=True)
ip=forms.GenericIPAddressField(error_messages={'required':('ip地址不能为空'),'invalid':('ip格式错误')})
注意:error_messages 这里 error 没有s
而 type(CheckForm.errors) 的 errorDict字典对象 errors 有s
def form(request):
obj=Alongin() #定义1个对象
if request.method=='POST':
CheckForm=Alongin(request.POST)
print(CheckForm.errors) #输出错误信息 errors
获取错误信息:
views.py
CheckForm.errors['username'] 获取username 的错误信息
返回<ul class="errorlist"><li>用户名不能为空</li></ul>
因为CheckForm.errors 是一个 django.forms.utils.ErrorDict 对象 ,可看做1个字典
通过CheckForm.errors['username'] 可查看对应 input[name =username] 的错误信息
再通过 as_json() 可以看出 列表内部为列表包含的 错误信息
as_json : [{"code": "required", "message": "\u90ae\u7bb1\u4e0d\u80fd\u4e3a\u7a7a" }]
即<ul class="errorlist"><li>用户名不能为空</li></ul> 可以当作列表来操作
CheckForm.errors['username'][0] 获取username 的详细错误信息
通过列表取值 xxx[0],可以查看出正确的错误信息:用户名不能为空
html
{{CheckForm.errors.username.0}}
注意: 如果不加.0 的话,返回的是1个 ul 包含的错误信息
<ul class="errorlist"><li>用户名不能为空</li></ul>
而我们只需要 错误内容,所以推荐加 xxxx.errors.xxxx .0
自定义错误实例:
两次输入密码不一样,在第二个密码框提示错误
方法1:add.error(field,error)
def clean(self):
cleaned_data = super(FM, self).clean()
pwd1 = self.cleaned_data.get('pwd1')
pwd2 = self.cleaned_data.get('pwd2')
if pwd1 != '' and pwd2 != '' and pwd1 != pwd2:
self.add_error('pwd2', error='两次输入的密码不一样') #添加自定义错误
else:
return cleaned_data
注意,你覆盖的 Form.clean() 引发的任何错误将不会与任何特定的字段关联。它们位于一个特定的“字段”(叫做 __all__ )中,如果需要可以通过non_field_errors() 方法访问。如果你想添加一个特定字段的错误到表单中,需要调用 add_error() 。
方法2:clean_<fieldname>()
def clean_pwd2(self):
cleaned_data = super(FM, self).clean()
pwd1 = self.cleaned_data.get('pwd1')
pwd2 = self.cleaned_data.get('pwd2')
if pwd1 != '' and pwd2 != '' and pwd1 != pwd2:
raise forms.ValidationError('两次输入密码不一致') #这里不用导入ValidationError
else:
return cleaned_data['pwd2']
常见验证库位置:
from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator
from django.core import validators