Django——forms组件(form校验字段功能,渲染模板功能)
一、forms组件介绍
1 注册功能,登录功能,前端需要校验(字段长度,邮箱是否合法。。。)
2 前端校验可以没有,后端校验是必须的,使用传统方式 if判断写的很多
3 借助于forms组件,可以快速实现字段的校验
from django.forms import Form
或者from django import forms
二、forms校验字段功能
url.py
from django.urls import path
from app01 import views
urlpatterns = [
# path('admin/', admin.site.urls),
path('register', views.register),
]
views.py
注意点:
1 调用is_valid()后,有form.errors和form.cleaned_data
2 form.cleaned_data不管成功与失败,都会有值,不一定是传入的值
3 form.errors看了源码,as_data,as_ul...
代码:
from app01 import myforms
def register(request):
# 数据可以是从前端传过来的,也可以是自己后台的数据
# 我现在有以下数据
data={'name':'lqz','email':'33333@qq.com','age':900}
# data={'email':'33333@qq.com','age':100}
# data={'age':100}
# 校验数据是否合法
# 实例化得到form对象,把要校验的数据传入
form=myforms.MyForm(data)
# 校验数据:form.is_valid() 返回布尔类型
if form.is_valid():
print('校验通过')
# 校验通过的数据
print(form.cleaned_data) # 不一定是上面传入的数据
else:
print(form.cleaned_data)
print('校验失败')
# 哪个字段失败了?失败的原因是什么
print(form.errors)
print(type(form.errors))
from django.forms.utils import ErrorDict
#### 重写了__str__
print(form.errors.as_json())
print(form.errors.as_data())
# form.errors.as_ul() # 是为了渲染模板
return HttpResponse('ok')
myforms.py
from django import forms
# 写一个类,写字段
class MyForm(forms.Form):
# 校验这个字段,最大长度是32,最小长度是3
name = forms.CharField(required=False, max_length=32, min_length=3,label='用户名')
email = forms.EmailField(label='邮箱')#required不写默认=True,那么在校验的时候就必须校验,会显示校验失败没传该字段
age=forms.IntegerField(max_value=200,min_value=0,label='年龄')
三、forms渲染模板功能
url.py myforms.py同form校验字段功能
views.py
from app01 import myforms
def register(request):
if request.method=='GET':
form=myforms.MyForm()
return render(request,'register.html',{'form':form})
elif request.method=='POST':
# 数据校验
form=myforms.MyForm(request.POST)
if form.is_valid():
print('校验通过,存数据库')
else:
print(form.errors.as_data())
print('校验失败,返回错误')
return HttpResponse('ok')
register.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<hr>
<h1>手动创建模板</h1>
<form action="" method="post">
<p>用户名:<input type="text" name="name"></p>
<p>邮箱:<input type="text" name="email"></p>
<p>年龄:<input type="text" name="age"></p>
<p><input type="submit" value="提交"></p>
</form>
<hr>
<h1>半自动渲染模板1</h1>
<form action="" method="post">
<p>用户名:{{ form.name }}</p>
<p>邮箱:{{ form.email }}</p>
<p>年龄:{{ form.age }}</p>
<p><input type="submit" value="提交"></p>
</form>
<h1>半自动渲染模板2(用的最多)</h1>
<form action="" method="post">
<p>{{ form.name.label }}--{{ form.name }}</p>
<p>{{ form.email.label }}---{{ form.email }}</p>
<p>{{ form.age.label }}---{{ form.age }}</p>
<p><input type="submit" value="提交"></p>
</form>
<h1>半自动渲染模板3(用的最多)</h1>
<form action="" method="post">
{% for foo in form %}
<p>{{ foo.label }} :{{ foo }}</p>
{% endfor %}
<p><input type="submit" value="提交"></p>
</form>
<h1>全自动(了解)</h1>
<form action="" method="post">
{# {{ form.as_ul }}#}
{{ form.as_p }}
{# <table>#}
{# {{ form.as_table }}#}
{# </table>#}
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>
赞 (0)
