Django form 表单类 ,表单可以提交数据,也可做校验
校验的方式:
(1):前端校验:
开发难度低,但是不能完全防止错误数据,因为有些请求是可以不经过网页。
所以一个安全的注册需要前后端的校验
(2): 后端校验:
i>最直观的方法,不适合大量的校验,是最简单的方法。检验的类型不能为空
def formPOST(request):
if request.method =="POST" and request.POST:
name = request.POST.get('name')
if name:
description = request.POST.get("description")
Type.objects.create(label=name,description=description)
types = Type.objects.all()
else:
return render(request,'index.html')
return render(request,'form-POST.html',locals())
ii> form类 ,在form表单中定义
在APP中创建一个脚本:
1、手动定义
from django import forms
class AuthorForm(forms.Form):
name = forms.CharField(max_length=32)
age = forms.IntegerFielld()
birthday = forms.DataField()
email = forms.EmailField()
phone = forms.CharField(max_length=32)
address = forms.Textarea()
2、来自于模型
from Article.models import Author
class AuthorForm_v2(forms.ModelForm):
class Meta:
model = Author
fields = "__all__"
前端效果渲染:
1、直接使用
2、as_p
3、as_ul
4、as_table (已失效)
5、循环使用
form 表单的校验
1、校验步骤:
1:、获取前端提交的数据,并将数据传递form类中
2、使用form类实例的 is_valid 方法进行校验
3、使用form类实验的 clean_data 获取校验过的数据,errors方法获取校验发生的错误。
from Article.froms import AuthorForm,AuthorForm_v2
def formClass(request):
authorForm = AuthorForm() #实例化一个空的表单对象,提交到前端给用户
if request.method == "POST" and request.POST
validData = AuthorForm(request.POST) # 使用form类对提交回来的数据进行后端校验
if valiData.is_valid() : # is_valid 校验 没有错误返回True,否则返回False
cleanData = validData.cleaned_data # 按照字典返回
else:
cleanData = validData.errors
return render(request,"formClass.html",locals())
2、自定义校验
1、自定义校验的方法名称必须是 clean_校验字段的名称
2、通过self.clean_data 方法获取校验字典的具体值
3、如果发生错误使用self.add_errdr("字段名称","错误内容") 添加错误
from django import forms
class AuthorForm(forms.Form):
name = forms.CharField(max_length=8,min_length=3,required=False,label="作者名字")
age = forms.IntegerField(label="作者年龄")
birthday = forms.DataField(label = "作者生日")
email = forms.EmailFiels(label="作者邮箱")
phone = forms.charField(label="作者电话")
address =forms.Textarea()
def clean_name(self):
name = self.cleaned_data.get("name")
if "管理员" in name:
self.add_error("name","非法命名")
else:
return name