1、Model 强大的数据库操作,弱小的数据验证
a. 表
一对多:
to
to_fields
related_name
related_query_name
on_delete
limit_choices_to
......
b. 操作
create
......
c. 验证
full_clean -> 字段正则判定 --> clean方法(钩子)
2、Form 强大的数据验证
is_valid() -> full_clean() -> 每个字段的正则,每个字段的方法 clean_字段名()
-> _clean_form -> clean(钩子)
-> _post_clean(钩子)
===》返回值is_valid()
cleaned_data
errors
==》 实时显示新插入的数据
1 from django.shortcuts import render 2 from django.forms import widgets,fields,Form,models as models_fields 3 from django.core.exceptions import ValidationError 4 from app01 import models 5 class UserForm(Form): 6 username = fields.CharField(label='用户名') 7 email = fields.EmailField(label='邮箱') 8 # 显示同数据库实时更新方式一(配合下面的init) 9 user_type1 = fields.ChoiceField(choices=models.UserType.objects.values_list('id','name')) 10 # 显示同数据库实时更新方式二 11 user_type2 = models_fields.ModelChoiceField(queryset=models.UserType.objects.all(), 12 empty_label='请选择用户类型', 13 to_field_name="id", 14 limit_choices_to={'id':1}) 15 user_type3 = models_fields.ModelMultipleChoiceField(queryset=models.UserType.objects.all(), 16 to_field_name="id", 17 limit_choices_to={'id': 1}) 18 def __init__(self,*args,**kwargs): 19 super(UserForm,self).__init__(*args,**kwargs) 20 self.fields['user_type1'].widget.choices = models.UserType.objects.all().values_list('id', 'name') 21 #通过钩子函数自定义错误 22 def clean_username(self): 23 # 24 value = self.cleaned_data['username'] 25 if value == 'root': 26 return value 27 else: 28 raise ValidationError('你不是我的...') 29 def clean(self): 30 v1 = self.cleaned_data['username'] 31 v2 = self.cleaned_data['email'] 32 if v1 == "root" and v2 == "root@live.com": 33 pass 34 else: 35 raise ValidationError('用户名或邮箱错误!!!') 36 return self.cleaned_data 37 # def _post_clean(self): 38 # v1 = self.cleaned_data['username'] 39 # v2 = self.cleaned_data['email'] 40 # if v1 == "root" and v2 == "root@live.com": 41 # pass 42 # else: 43 # self.add_error("__all__", ValidationError('用户名或邮箱错误...')) 44 45 def index(request): 46 if request.method == "GET": 47 obj = UserForm() 48 return render(request,'fm.html',{'obj': obj}) 49 elif request.method == "POST": 50 obj = UserForm(request.POST) 51 obj.is_valid() 52 # data = obj.clean() 53 # obj.cleaned_data 54 # print(obj.errors) 55 return render(request, 'fm.html', {'obj': obj}) 56 57 def test(request): 58 # obj = models.News.objects.create() 59 obj = models.News(title='root_12') 60 obj.full_clean() 61 obj.save()