单个错误第一种方式
修改原码方式
代码:
def ajax(request):
if request.method == 'GET':
obj = forms.UserForm()
return render(request,'ajax.html',{'obj':obj})
else:
ret = {'status':False,'message':None}
import json
obj = forms.UserForm()
if obj.is_valid():
# 登录验证数据库是否存在
print(obj.cleaned_data)
if models.Users.objects.filter(username=obj.username).count(): # 数据库是否存在
obj.errors['username'] = ['用户名已存在']
if models.Users.objects.filter(email=obj.email).filter().count():
obj.errors['email'] = ['email已存在']
ret['status'] = True
return HttpResponse(json.dumps(ret))
from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
# 验证数据库是否存在
class AjaxForm(forms.Form):
username = fields.IntegerField()
user_id = fields.IntegerField(
widget=widgets.Select(choices=[(0,'q'),(1,'w')])
)
# 数据已经存到obj.cleaned_data
# 之后调用 clean_%s
# 必须有返回值
# 如果出错:raise ValidationError('已存在')
# 异常捕捉 ValidationError 只能捕捉这个异常
def clean_username(self):
v = self.cleaned_data['username']
if models.Users.objects.filter(username=v).count():
raise ValidationError('用户名已存在')
def clean_user_id(self):
return self.cleaned_data['user_id']
整体错误
代码
def clean(self):
value_dict = self.cleaned_data
v1 = value_dict.get('username')
v2 = value_dict.get('user_id')
if v1 == 'root' and v2 == 1:
raise ValidationError('整体错误信息')
return self.cleaned_data
# 单个错误信息 前端放到字段名中
# 前端取出错误信息 .__all__ 可以取出整体错误信息
# _post_clean()方法 自定制 自己做异常处理