加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

【Django入坑之路】Form组件

发布时间:2020-12-15 17:08:39 所属栏目:大数据 来源:网络整理
导读: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 = fi

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)) 
View Code

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)最好用一样的,否则会出现提交后输入框消失的情况
View Code

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>
View Code

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二次筛选
View Code

?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
View Code

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
View Code

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读