form组件-字段

Form类

创建Form类时,主要涉及到 【字段】 和 【插件】,字段用于对用户请求数据的验证,插件用于自动生成HTML

1、Django内置字段如下:

  1 Field
  2     required=True,               是否允许为空
  3     widget=None,                 HTML插件(from django.forms import widgets) 设置属性:widget=forms.TextInput(attrs={'class': 'c1'}),
  4 
  5     label=None,                  用于生成Label标签或显示内容(前端obj.label--> 用户名:【】(输入框))
  6     initial=None,                初始值
  7     help_text='',                帮助信息(在标签旁边显示)
  8     error_messages=None,         错误信息 {'required': '不能为空', 'invalid': '格式错误'}
  9     show_hidden_initial=False,   是否在当前插件后面再加一个隐藏的且具有默认值的插件(可用于检验两次输入是否一直)
 10     validators=[],               自定义验证规则(正则表达式)
 11     localize=False,              是否支持本地化(比如时间数据,当地时间,UTC时间(比如东八区,自动加8小时))
 12     disabled=False,              是否可以编辑
 13     label_suffix=None            Label内容后缀
 14 
 15 
 16 CharField(Field)                 字符串字段, 用于较短的字符串.CharField 要求必须有一个参数 maxlength, 用于从数据库层和Django校验层限制该字段所允许的最大字符数.
 17     max_length=None,             最大长度
 18     min_length=None,             最小长度
 19     strip=True                   是否移除用户输入空白
 20 
 21 IntegerField(Field)              用于保存一个整数
 22     max_value=None,              最大值
 23     min_value=None,              最小值
 24 
 25 FloatField(IntegerField)
 26     一个浮点数. 必须 提供两个参数:
 27         #   参数              描述
 28         # max_digits          总位数(不包括小数点和符号)
 29         # decimal_places      小数位数
 30                 # 举例来说, 要保存最大值为 100 (小数点后保存2位),你要这样定义字段:
 31                 #
 32                 # models.FloatField(..., max_digits=5, decimal_places=2)
 33                 # 要保存最大值一百万(小数点后保存10位)的话,你要这样定义:
 34                 #
 35                 # models.FloatField(..., max_digits=19, decimal_places=10)
 36     ...
 37 
 38 DecimalField(IntegerField)
 39     max_value=None,              最大值
 40     min_value=None,              最小值
 41     max_digits=None,             总长度
 42     decimal_places=None,         小数位长度
 43 
 44 BaseTemporalField(Field)
 45     input_formats=None          时间格式化
 46 
 47 DateField(BaseTemporalField)    格式:2015-09-01
 48 
 49 TimeField(BaseTemporalField)    格式:11:12
 50 DateTimeField(BaseTemporalField)格式:2015-09-01 11:12
 51 
 52 DurationField(Field)            时间间隔:%d %H:%M:%S.%f
 53     ...
 54 
 55 RegexField(CharField)
 56     regex,                      自定制正则表达式
 57     max_length=None,            最大长度
 58     min_length=None,            最小长度
 59     error_message=None,         忽略,错误信息使用 error_messages={'invalid': '...'}
 60 
 61 EmailField(CharField)
 62     ...
 63 
 64 FileField(Field)
 65     allow_empty_file=False     是否允许空文件
 66 
 67 ImageField(FileField)
 68     ...
 69     注:需要PIL模块,pip3 install Pillow
 70     以上两个字典使用时,需要注意两点:
 71         - form表单中 enctype="multipart/form-data"
 72         - view函数中 obj = MyForm(request.POST, request.FILES)
 73 
 74 URLField(Field)
 75      # 用于保存 URL. 若 verify_exists 参数为 True (默认), 给定的 URL 会预先检查是否存在( 即URL是否被有效装入且
 76       # 没有返回404响应).
 77     ...
 78 
 79 
 80 BooleanField(Field)
 81     ...
 82 
 83 NullBooleanField(BooleanField)
 84     # A true/false field. admin 用 checkbox 来表示此类字段.
 85     ...
 86 
 87 ChoiceField(Field)
 88     ...
 89     choices=(),                选项,如:choices = ((0,'上海'),(1,'北京'),)
 90     required=True,             是否必填
 91     widget=None,               插件,默认select插件
 92     label=None,                Label内容
 93     initial=None,              初始值
 94     help_text='',              帮助提示
 95 
 96 
 97 ModelChoiceField(ChoiceField)
 98     ...                        django.forms.models.ModelChoiceField
 99     queryset,                  # 查询数据库中的数据(写model方法,该方法会在前端显示object,需要去对应的model写__str__)
100     empty_label="---------",   # 默认空显示内容(比如下拉框第一行显示"请选择")
101     to_field_name=None,        # HTML中value的值对应的字段(注意是标签中的value<option>)
102     limit_choices_to=None      # ModelForm中对queryset二次筛选
103 
104 ModelMultipleChoiceField(ModelChoiceField)
105     ...                        django.forms.models.ModelMultipleChoiceField
106 
107 
108 
109 TypedChoiceField(ChoiceField)
110     coerce = lambda val: val   对选中的值进行一次转换(通常choice字段后端会受到字符串,如"1",但此处可以转化 比如int)
111     empty_value= ''            空值的默认值
112 
113 MultipleChoiceField(ChoiceField)
114     ...
115 
116 TypedMultipleChoiceField(MultipleChoiceField)
117     coerce = lambda val: val   对选中的每一个值进行一次转换
118     empty_value= ''            空值的默认值
119 
120 ComboField(Field)
121     fields=()                  使用多个验证,如下:即验证最大长度20,又验证邮箱格式
122                                fields.ComboField(fields=[fields.CharField(max_length=20), fields.EmailField(),])
123 
124 MultiValueField(Field)
125     PS: 抽象类,子类中可以实现聚合多个字典去匹配一个值,要配合MultiWidget使用
126 
127 SplitDateTimeField(MultiValueField)
128     input_date_formats=None,   格式列表:['%Y--%m--%d', '%m%d/%Y', '%m/%d/%y']
129     input_time_formats=None    格式列表:['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
130 
131 FilePathField(ChoiceField)     文件选项,目录下文件显示在页面中
132     path,                      文件夹路径
133     match=None,                正则匹配
134     recursive=False,           递归下面的文件夹
135     allow_files=True,          允许文件
136     allow_folders=False,       允许文件夹
137     required=True,
138     widget=None,
139     label=None,
140     initial=None,
141     help_text=''
142 
143 GenericIPAddressField
144     protocol='both',           both,ipv4,ipv6支持的IP格式
145     unpack_ipv4=False          解析ipv4地址,如果是::ffff:192.0.2.1时候,可解析为192.0.2.1, PS:protocol必须为both才能启用
146 
147 SlugField(CharField)           数字,字母,下划线,减号(连字符)(只能包含这些)
148     ...
149 
150 UUIDField(CharField)           uuid类型
151     ...

2.实例:

 1 from django.shortcuts import render,redirect
 2 from django.forms import widgets
 3 # Create your views here.
 4 from django import forms
 5 from django.forms import fields
 6 from app02.models import UserIn
 7 from app02 import models
 8 
 9 class TestForm(forms.Form):
10     user=fields.CharField(
11         required=True,#是否必填
12         max_length=16,#最大长度
13         min_length=6,#最小长度
14         error_messages={},#错误提示
15         # lable='用户名',
16         initial='请输入用户名',
17         help_text='asasdasd',
18         show_hidden_initial=False,
19         # widget=widgets.Textarea(),
20         label='用户名',
21         # disabled=True,
22         # label_suffix=':',
23     )
24 
25     age=fields.IntegerField(
26         label='年龄',
27         max_value=20,
28         min_value=12,
29         error_messages={
30             'max_value':'太长了',
31             'min_value': '太短了',
32         }
33     )
34     email=fields.EmailField(
35         label='邮箱',
36     )
37     img=fields.FileField()
38     #下拉框
39     city=fields.ChoiceField(
40         choices=[(1,'北京'),(2,'上海'),(3,'深圳')],
41         initial=2,
42     )
43     #多选框
44     hobby=fields.MultipleChoiceField(
45         choices=[(1,'篮球'),(2,'唱歌'),('3','高尔夫')],
46         initial=[1,2]#多选
47     )
48 
49 
50 def test(request):
51     if request.method=='GET':
52         obb=TestForm()
53         return render(request,'test.html',{'obb':obb})
54     else:
55         obb=TestForm(request.POST,request.FILES)
56         obb.is_valid()
57         print(obb.cleaned_data)
58         return render(request,'test.html',{"obb":obb})
59            
View Code

3.Django内置插件:

 1 TextInput(Input)
 2 NumberInput(TextInput)
 3 EmailInput(TextInput)
 4 URLInput(TextInput)
 5 PasswordInput(TextInput)
 6 HiddenInput(TextInput)
 7 Textarea(Widget)
 8 DateInput(DateTimeBaseInput)
 9 DateTimeInput(DateTimeBaseInput)
10 TimeInput(DateTimeBaseInput)
11 CheckboxInput
12 Select
13 NullBooleanSelect
14 SelectMultiple
15 RadioSelect
16 CheckboxSelectMultiple
17 FileInput
18 ClearableFileInput
19 MultipleHiddenInput
20 SplitDateTimeWidget
21 SplitHiddenDateTimeWidget
22 SelectDateWidget

4.常用选择插件

 1 # 单radio,值为字符串
 2 # user = fields.CharField(
 3 #     initial=2,
 4 #     widget=widgets.RadioSelect(choices=((1,'上海'),(2,'北京'),))
 5 # )
 6  
 7 # 单radio,值为字符串
 8 # user = fields.ChoiceField(
 9 #     choices=((1, '上海'), (2, '北京'),),
10 #     initial=2,
11 #     widget=widgets.RadioSelect
12 # )
13  
14 # 单select,值为字符串
15 # user = fields.CharField(
16 #     initial=2,
17 #     widget=widgets.Select(choices=((1,'上海'),(2,'北京'),))
18 # )
19  
20 # 单select,值为字符串
21 # user = fields.ChoiceField(
22 #     choices=((1, '上海'), (2, '北京'),),
23 #     initial=2,
24 #     widget=widgets.Select
25 # )
26  
27 # 多选select,值为列表
28 # user = fields.MultipleChoiceField(
29 #     choices=((1,'上海'),(2,'北京'),),
30 #     initial=[1,],
31 #     widget=widgets.SelectMultiple
32 # )
33  
34  
35 # 单checkbox
36 # user = fields.CharField(
37 #     widget=widgets.CheckboxInput()
38 # )
39  
40  
41 # 多选checkbox,值为列表
42 # user = fields.MultipleChoiceField(
43 #     initial=[2, ],
44 #     choices=((1, '上海'), (2, '北京'),),
45 #     widget=widgets.CheckboxSelectMultiple
46 # )

 

posted on 2018-12-16 20:42  lfylcj  阅读(182)  评论(0编辑  收藏  举报

导航