1,model的两个功能
1,数据库操作
2,验证只有一个clean方法作为钩子来操作,方法比较少
2,form(专门用来做验证的) 根据form里面写的类,类里面的字段,这些字段里有内置的的正则表达式
一。基于form来做的过程
创建两张表,两张表之间用Foreignkey进行关联
生成表
如果现再index.html的页面中对UserInfo表进行操作,那么应该把该表格中的所有信息从后台传过来,把所有的字段重新创建一遍(用form的化,需要自己写field字段,用modelForm,字段可以从类里面去提取过来)
1 from django.shortcuts import render 2 from django import forms 3 from django.forms import fields 4 from app1 import models 5 6 #基于form来做的数据展示 7 class UserInfoForm(forms.Form): 8 username = fields.CharField(max_length=32,label='用户名') 9 email = fields.EmailField() 10 user_type = fields.ChoiceField( 11 choices=models.UserType.objects.values_list('id','caption') 12 ) 13 14 def __init__(self,*args,**kwargs):#继承了UserInfoForm这张表格,并且将他重构 15 super(UserInfoForm,self.__init__(*args,**kwargs)) 16 self.fields['user_type'].choices = models.UserType.objects.values_list('id','caption') 17 #每次都将表中的信息全部都更新 18 19 def index(request): 20 if request.method=='GET': 21 obj = UserInfoForm() 22 return render(request,'index.html',{'obj':obj}) 23 elif request.method=='POST': 24 obj = UserInfoForm(request.POST) 25 print(obj.is_valid()) 26 print(obj.cleaned_data) 27 print(obj.errors) 28 # models.UserInfo.objects.create(**obj.cleaned_data)#创建信息 29 return render(request,'index.html',{'obj':obj}) 30 """ 31 #基于modelform来做的数据信息展示 32 class UserInfoModelForm(forms.ModelForm):#form下的modelform方法 33 class Meta: 34 model = models.UserInfo#指去哪个类里面去获取字段 35 fields='__all__'#指的是所有的字段 36 #fields=['username','email']#显示指定字段 37 # exclude=['username']#排除某一项 38 def index(request): 39 if request.method =='GET': 40 obj = UserInfoModelForm() 41 return render(request,'index.html',{'obj':obj}) 42 elif request.method=='POST': 43 obj = UserInfoModelForm(request.POST) 44 print(obj.is_valid())#验证是不是通过 45 print(obj.cleaned_data)#验证所有的数据 46 print(obj.errors) 47 return render(request,'index.html',{'obj':obj}) 48 """
注释部分为modelform来做数据展示的views代码,其余部分为基于model的数据展示
用form方法的时候,验证功能的函数其实是写在BaseForm里的:
UserInfoForm-->继承了Form--->继承了BaseForm(is_valid......)
点击提交的时候,modelform也可以做验证
UserInfoModelForm-->继承了ModelForm--->继承了BaseModelForm--->继承了BaseForm(is_valid......)