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 valView 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