用表单验证数据
常用的Field:
使用Field可以是对数据验证的第一步。你期望这个提交上来的数据是什么类型,那么就使用什么类型的Field。
CharField:
用来接收文本。
参数:
max_length:这个字段值的最大长度。
min_length:这个字段值的最小长度。
required:这个字段是否是必须的。默认是必须的。
error_messages:在某个条件验证失败的时候,给出错误信息。
EmailField:
用来接收邮件,会自动验证邮件是否合法。
错误信息的key:required、invalid。
FloatField:
用来接收浮点类型,并且如果验证通过后,会将这个字段的值转换为浮点类型。
参数:
max_value:最大的值。
min_value:最小的值。
错误信息的key:required、invalid、max_value、min_value。
IntegerField:
用来接收整形,并且验证通过后,会将这个字段的值转换为整形。
参数:
max_value:最大的值。
min_value:最小的值。
错误信息的key:required、invalid、max_value、min_value。
URLField:
用来接收url格式的字符串。
错误信息的key:required、invalid。
代码
from django.shortcuts import HttpResponse
from django import forms
import json
from django.http import JsonResponse
class AjaxForm(forms.Form):
#只定义一个username字段,一会通过get获取
username = forms.CharField(
required=True,
min_length=3,
max_length=5,
error_messages={
"required":"用户名不能为空",
"min_length": "用户名不能少于3位数",
"max_length":"不能超过5",
}
)
def ajaxForm(request):
if request.method == "GET":
ret = {"status": "NG", "msg": None}
af = AjaxForm(request.GET)
if af.is_valid():
# 清洁的数据?
print(af.cleaned_data,"1111111111111111111111111111111")
ret["status"] = "OK"
return HttpResponse(json.dumps(ret))
else:
print("NG")
ret["msg"] = af.errors
return HttpResponse(json.dumps(ret))
"""
af.errors.as_ul() class 'django.utils.safestring.SafeText'> 默认就是这个,好像是一个html标签
af.errors.as_data() <class 'dict'>
af.errors.as_json() <class 'str'>
这样就可以灵活使用了,困扰了好久
"""
下面在来一个CharField的使用
from django import forms
class UserAccountForm(forms.Form):
#只定义一个username字段,一会通过get获取
username = forms.CharField(
required=True,min_length=3,max_length=9,
error_messages={
"required":"用户名不能为空",
"min_length": "用户名不能小于3位",
"max_length":"不能超过9位",}
)
password = forms.RegexField(
required=True,min_length=6,max_length=15,
regex=r"^\w+$",#只能数字 字母 下划线,否则输出 {'password': [ValidationError(['格式不正确'])]}
error_messages={
"required":"密码不能为空",
"min_length": "密码至少6位",
"max_length":"不能超过15位",
"invalid":"格式不正确",
}
)
from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import View
import json
# Create your views here.
class LoginView(View):
def get(self, request):
return HttpResponse('result')
def post(self, request):
from .forms import UserAccountForm
uf = UserAccountForm(request.POST)
if uf.is_valid():
# 清洁的数据
print("OK")
print(uf.cleaned_data)
else:
# 错误信息字典
print("NO")
errmsg_dict = json.loads(uf.errors.as_json())
print(errmsg_dict)
print(json.dumps(errmsg_dict,ensure_ascii=False))
return HttpResponse('post')
"""
uf.errors.as_ul() <class 'django.utils.safestring.SafeText'>
uf.errors.as_json() <class 'str'>
uf.errors.as_data() <class 'dict'> 但是这个字典有点问题
{'password': [ValidationError(['格式不正确'])]} 会出现这种
"""