1:From组件的简单使用
1创建From:
1 #导入模块 2 from django import forms 3 from django.forms import fields,widgets 导入自定制插件 4 5 6 class F1(forms.Form): 7 自定制插件:widget=widgets.TextInput(attrs={'class': 123})设置属性 8 user = fields.CharField(min_length=3,max_length=18,widget=widgets.TextInput(attrs={'class': 123})) 9 10 age = fields.IntegerField(required=True) 11 email = fields.EmailField(required=12 file = fields.FileField(required=False) 13 TypedChoiceField ---- coerce=lambda x: int(x)接收的值转换成int类型 14 city = fields.TypedChoiceField(choices=((0,上海'),(1,1)">北京lambda x: int(x)) 15 多选框 16 hobby = fields.MultipleChoiceField(choices=((0,1)">000111222333')),initial=(2,3))
2:函数处理:
from app03.form import F1 从创建的应用aoo03下导入from文件里的F1 2 def F1(reuqest): 4 If request.method==”GET”: 5 F1.obj = F1() 创建FORM组件定义的输入框 6 Return render(request,”html文件”,{“obj”:obj}) 输入框传到前端,错误提示保留数据 7 8 If reqeust.method == “POST”: 9 F1.obj = F1(request.POST) 实例化自定义的FORM组件,接收数据 10 If obj.is_valid(): is_valid() 验证是否符合定义的正则 11 print("验证成功",obj.cleaned_data) 查看成功数据 12 ######这个位置可以扩展数据库验证之类的操作,或者直接使用钩子验证 14 return redirect(http://想去的网址") 15 16 else: 17 验证失败显示错误的提示 18 Return render(request,{“obj”:obj}) 降错误的提示传给前端 19 20 注意:这里的GET与POST请求实例化FORM类的对象名(这里是obj)最好用一样的,否则会出现提交后输入框消失的情况
3:生成HTML:
1 上传文件要加上enctype="multipart/form-data" novalidate 2 不适用浏览器默认错误提示要加上 novalidate 3 4 <form action=/app03/project/" method=POST" enctype=multipart/form-data" novalidate> 5 <p>user:{{ obj.user }} {{ obj.errors.user.0}}</p> 6 <p>age:{{ obj.age }} {{ obj.errors.age.0}}</p> 7 <p>email:{{ obj.email }}{{ obj.errors.email.0}}</p> 8 <p>{{ obj.file }}{{ obj.errors.file.0}}</p> 9 <p>{{ obj.city }}{{ obj.errors.city.0}}</p> 10 <p>{{ obj.hobby }}{{ obj.errors.hobby.0}}</p> 11 <p><input type=submit" value=提交"></p> 12 </form>
2:FROM类常用属性
1:Django常用内置字段:
Field 2 required=True,是否允许为空 3 widget=None,HTML插件 4 label= 5 initial= 6 help_text='',帮助信息(在标签旁边显示) 7 error_messages=None,错误信息 {required': 不能为空',1)">invalid格式错误'} 8 show_hidden_initial=False,是否在当前插件后面再加一个隐藏的且具有默认值的插件(可用于检验两次输入是否一直) 9 validators=[],自定义验证规则 10 localize=11 disabled=12 label_suffix=None Label内容后缀 13 14 15 CharField(Field) 16 max_length=17 min_length=18 strip=True 是否移除用户输入空白 20 IntegerField(Field) 21 max_value=22 min_value=23 24 FileField(Field) 25 allow_empty_file=False 是否允许空文件 26 27 ImageField(FileField) 28 ... 29 注:需要PIL模块,pip3 install Pillow 30 以上两个字典使用时,需要注意两点: 31 - form表单中 enctype=" 32 - view函数中 obj = MyForm(request.POST,request.FILES) 33 34 35 ChoiceField(Field) 36 37 choices=(),选项,如:choices = ((0,1)">),) 38 required=39 widget=40 label=41 initial=42 help_text=43 44 45 ModelChoiceField(ChoiceField) 46 ... django.forms.models.ModelChoiceField 47 queryset, 查询数据库中的数据 48 empty_label=--------- 默认空显示内容 49 to_field_name=None,1)"> HTML中value的值对应的字段 50 limit_choices_to=None ModelForm中对queryset二次筛选
2:Django内置插件:
TextInput(Input) NumberInput(TextInput) EmailInput(TextInput) 4 URLInput(TextInput) 5 PasswordInput(TextInput) HiddenInput(TextInput) 7 Textarea(Widget) 8 DateInput(DateTimeBaseInput) 9 DateTimeInput(DateTimeBaseInput) 10 TimeInput(DateTimeBaseInput) 11 CheckboxInput 12 Select 13 NullBooleanSelect 14 SelectMultiple RadioSelect 16 CheckboxSelectMultiple 17 FileInput 18 ClearableFileInput 19 MultipleHiddenInput SplitDateTimeWidget 21 SplitHiddenDateTimeWidget 22 SelectDateWidget
3:全局钩子,局部钩子
1 1:全局钩子: 两个密码校验 4 clean(self): 5 pwd = self.cleaned_data.get(password") 校验后的name=password属性密码 6 re_pwd = self.cleaned_data.get(again_password校验后的name=again_password属性密码 7 if pwd != re_pwd: 8 如果不一致就添加错误信息返回 9 self.add_error(两次密码不一致)) 10 11 return self.cleaned_data 12 局部钩子--用户名 14 def clean_username(self): clean_验证的字段 15 username = self.cleaned_data.get(username拿到输入的字段 16 obj_user = models.UserInfo.objects.filter(username = username)数据库查找这个字段 17 18 if obj_user: 如果存在 19 self.add_error(用户名已存在20 21 username 22 局部钩子--手机号去重 25 def clean_phone(self): 26 phone = self.cleaned_data.get(phone") 27 obj_user = models.UserInfo.objects.filter(phone=phone) 28 如果存在 29 if obj_user: 30 self.add_error(手机号已存在31 32 return phone
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。