from django.shortcuts import render, HttpResponse
from django import forms
from django.forms.utils import ErrorDict
# Create your views here.
import json
from django.core.validators import ValidationError
# Django序列化自定制
class JsonCustomEncoder(json.JSONEncoder):
def default(self, filed):
if isinstance(filed, ValidationError): # Data也可以处理
return {'code': filed.code, 'message': filed.message}
else:
json.JSONEncoder.default(self, filed)
class LoginForm(forms.Form):
# 模板,用户提交的name和这里的变量名一定要是一致的.否则不能获取数据
user = forms.CharField(min_length=6, error_messages={'required': '用户名不能为空', 'min_length': '用户名长度不能小于6'})
email = forms.EmailField(error_messages={'required': '邮箱不能为空', 'invalid': '邮箱格式错误'})
pass
"""
1.创建模板
2.将请求交给模板,创建一个对象
3.进行验证
4.保留上一次的数据
"""
def ajax_login(request):
if request.method == "GET":
return render(request, "ajax_login.html")
elif request.method == "POST":
ret = {'status': True, 'error': None, 'data': None}
obj = LoginForm(request.POST)
if obj.is_valid():
print(obj.clean())
else:
res_str = obj.errors.as_json() # res_str是一个字符串
print(obj.errors.as_data())
# {'user': [ValidationError(['用户名长度不能小于6'])], 'email': [ValidationError(['邮箱格式错误'])]}
# json.dumps(ret) 只是处理的是PYthon的数据类型,不能处理Django的数据类型
# 注意一点:Django中的values返回的是字典,values_list返回的是元组,all()返回的是所有的对象
from django.core.exceptions import ValidationError
ret['status'] = False
ret['error'] = obj.errors.as_data()
return HttpResponse(json.dumps(ret, cls=JsonCustomEncoder)) # 前端Parse就可以
模板三要素: