modelform的操作以及验证

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......)

 

posted @ 2018-02-14 13:10  cerofang  阅读(229)  评论(0编辑  收藏  举报