其他分享
首页 > 其他分享> > forms组件

forms组件

作者:互联网

服务端假设所有用户提交的数据都是不可信任的,所以Django框架内置了form组件来验证用户提交的信息

form组件的2大功能:
       1 验证(显示错误信息)
       2 保留用户上次输入的信息
                  -- 可以生成html标签

form组件的简单示例代码

 1 from django.shortcuts import render,HttpResponse
 2 
 3 # Create your views here.
 4 from app01.models import Emp
 5 
 6 from django import forms # forms组件
 7 from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
 8 
 9 class EmpForm(forms.Form):
10     name=forms.CharField(min_length=5,label="姓名",error_messages={"required":"该字段不能为空!"})
11     age=forms.IntegerField(label="年龄")
12     salary=forms.CharField(label="薪水")
13 
14     def clean_name(self):
15         val=self.cleaned_data.get("name")
16         # 二次校验
17         if val.isdigit():
18             raise  ValidationError("姓名不能是纯数字!")
19         elif Emp.objects.filter(name=val):
20             raise ValidationError("该员工已存在!")
21         else:
22             return val
23 
24     def clean_age(self):
25         val=self.cleaned_data.get("age")
26         if int(val) > 100:
27             raise ValidationError("年龄不能大于100!")
28         else:
29             return val
30 
31 
32 def addEmp(request):
33 
34     if request.method=="GET":
35         form=EmpForm()
36         return render(request,"add.html",locals())
37 
38     else:
39 
40         form=EmpForm(request.POST)
41         if form.is_valid():
42             Emp.objects.create(**form.cleaned_data)
43             return HttpResponse("添加成功")
44 
45         else:
46             # print(form.cleaned_data)
47             # print(form.errors) # {"name":["Ensure this value has at least 5 characters (it has 3).",]}
48             return render(request, "add.html",{"form":form})
View Code

 

1 验证(显示错误信息)

通过上述代码先构建了一个类:   class EmpForm(forms.Form):

然后通过设置想要检验的字段:例如  name=forms.CharField(min_length=5,label="姓名",error_messages={"required":"该字段不能为空!"})

还可以作二次补充校验

1     def clean_name(self):
2         val=self.cleaned_data.get("name")
3         # 二次校验
4         if val.isdigit():
5             raise  ValidationError("姓名不能是纯数字!")
6         elif Emp.objects.filter(name=val):
7             raise ValidationError("该员工已存在!")
8         else:
9             return val
View Code

 

 

2.   -- 可以生成html标签

生成HTML 标签有三种渲染方式

 1 <h3>渲染方式1 </h3>
 2 <form action="" method="post">
 3     {% csrf_token %}
 4     {{ form.as_p }}
 5      <input type="submit" value="submit">
 6 </form>
 7 
 8 
 9 
10 <h3>渲染方式2 </h3>
11 
12 <form action="" method="post" novalidate>
13     {% csrf_token %}
14     <div>
15         <label for="">姓名</label>
16         {{ form.name }} <span>{{ form.name.errors.0 }}</span>
17     </div>
18      <div>
19         <label for="">年龄</label>
20         {{ form.age }}<span>{{ form.age.errors.0 }}</span>
21     </div>
22      <div>
23         <label for="">薪水</label>
24         {{ form.salary }}<span>{{ form.salary.errors.0 }}</span>
25     </div>
26 
27      <input type="submit" value="submit">
28 </form>
29 
30 
31 <h3>渲染方式3</h3>
32 
33 <form action="" method="post" novalidate>
34     {% csrf_token %}
35     {% for field in form %}
36     <div>
37         <label for="">{{ field.label }}</label>
38         {{ field }} <span>{{ field.errors.0 }}</span>
39     </div>
40     {% endfor %}
41 
42      <input type="submit" value="submit">
43 </form>
View Code

这三种方法都可以渲染出相应的HTML标签,只是渲染方式不一样

 

 

详细可参考:https://www.cnblogs.com/yangmingxianshen/p/8396535.html

标签:return,name,val,ValidationError,forms,form,组件
来源: https://www.cnblogs.com/Mixtea/p/10447404.html