Django 08.19
1.form组件
对前端和后端都要校验
前端校验的目的:减少后台代码连接数据库的压力
django forms:主要针对的是后台的校验
from django.forms import Form
from django.forms import fields
class LoginForm(Form):
username = fields.CharField(
required=True,
max_length=18,
min_length=6,
error_messages={
"required" : "不能为空",
"max_length" : "不能超过18",
"min_length" : "不能小于6",
}
)
pwd = fields.CharField()
def login(request):
if request.method == "GET":
return render(request,"login.html")
else:
obj = LoginForm(request.POST)
if obj.is_valid():
print(obj.cleaned_data)
else:
print(obj.errors)
return render(request, "login.html" ,{'obj':obj})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<form action="/login/" method="post">
<input type="text" name="username">{{ obj.errors.username.0 }}<br>
<input type="password" name="pwd">{{ obj.errors.pwd.errors.0 }}<br>
<input type="submit" value="提交">
</form>
</body>
</html>
2.forms数据类型
def test(request):
return HttpResponse("OK")
from django.forms import Form
from django.forms import fields
class LoginForm(Form):
username = fields.CharField(
required=True,
max_length=18,
min_length=6,
error_messages={
"required" : "不能为空",
"max_length" : "不能超过18",
"min_length" : "不能小于6",
},
# validators=[], #自定义验证规则
#### 生成html标签
widget=fields.Select, #HTML插件
label = "用户名", # 用于生成Label标签或显示内容
# initial='666', # 初始值
help_text = '帮助信息', # 帮助信息(在标签旁边显示)
# localize=False, # 是否支持本地化
disabled = False, # 是否可以编辑
label_suffix = ">>>", # Label内容后缀
)
pwd = fields.CharField()
age = fields.IntegerField(
required=True,
max_value=100,
min_value=0,
error_messages={
"required":"不能为空",
"invalid":"格式错误"
}
)
mail = fields.EmailField(
error_messages={
"valid":"格式错误"
}
)
def login(request):
if request.method == "GET":
obj = LoginForm()
return render(request,"login.html",{"obj":obj})
else:
obj = LoginForm(request.POST)
if obj.is_valid():
print(obj.cleaned_data)
else:
print(obj.errors)
return render(request, "login.html" ,{'obj':obj})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<form action="/login/" method="post" novalidate>
{{ obj.as_p }}
{{ obj.username.label }}:{{ obj.username }} {{ obj.errors.username.0 }}
<input type="submit" value="提交">
</form>
</body>
</html>

浙公网安备 33010602011771号