Django-Form組件之字段


Form類

創建Form類時,主要涉及到 【字段】 和 【插件】,字段用於對用戶請求數據的驗證,插件用於自動生成HTML;

1、Django內置字段如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
Field
     required = True ,               是否允許為空
     widget = None ,                 HTML插件(from django.forms import widgets) 設置屬性:widget=forms.TextInput(attrs={'class': 'c1'}),

     label = None ,                  用於生成Label標簽或顯示內容(前端obj.label--> 用戶名:【】(輸入框))
     initial = None ,                初始值
     help_text = '',                幫助信息(在標簽旁邊顯示)
     error_messages = None ,         錯誤信息 { 'required' '不能為空' 'invalid' '格式錯誤' }
     show_hidden_initial = False ,   是否在當前插件后面再加一個隱藏的且具有默認值的插件(可用於檢驗兩次輸入是否一直)
     validators = [],               自定義驗證規則(正則表達式)
     localize = False ,              是否支持本地化(比如時間數據,當地時間,UTC時間(比如東八區,自動加8小時))
     disabled = False ,              是否可以編輯
     label_suffix = None             Label內容后綴
 
 
CharField(Field)
     max_length = None ,             最大長度
     min_length = None ,             最小長度
     strip = True                    是否移除用戶輸入空白
 
IntegerField(Field)
     max_value = None ,              最大值
     min_value = None ,              最小值
 
FloatField(IntegerField)
     ...
 
DecimalField(IntegerField)
     max_value = None ,              最大值
     min_value = None ,              最小值
     max_digits = None ,             總長度
     decimal_places = None ,         小數位長度
 
BaseTemporalField(Field)
     input_formats = None           時間格式化   
 
DateField(BaseTemporalField)    格式: 2015 - 09 - 01
TimeField(BaseTemporalField)    格式: 11 : 12
DateTimeField(BaseTemporalField)格式: 2015 - 09 - 01  11 : 12
 
DurationField(Field)            時間間隔: % % H: % M: % S. % f
     ...
 
RegexField(CharField)
     regex,                      自定制正則表達式
     max_length = None ,            最大長度
     min_length = None ,            最小長度
     error_message = None ,         忽略,錯誤信息使用 error_messages = { 'invalid' '...' }
 
EmailField(CharField)      
     ...
 
FileField(Field)
     allow_empty_file = False      是否允許空文件
 
ImageField(FileField)      
     ...
     注:需要PIL模塊,pip3 install Pillow
     以上兩個字典使用時,需要注意兩點:
         -  form表單中 enctype = "multipart/form-data"
         -  view函數中 obj  =  MyForm(request.POST, request.FILES)
 
URLField(Field)
     ...
 
 
BooleanField(Field)  
     ...
 
NullBooleanField(BooleanField)
     ...
 
ChoiceField(Field)
     ...
     choices = (),                選項,如:choices  =  (( 0 , '上海' ),( 1 , '北京' ),)
     required = True ,             是否必填
     widget = None ,               插件,默認select插件
     label = None ,                Label內容
     initial = None ,              初始值
     help_text = '',              幫助提示
 
 
ModelChoiceField(ChoiceField)
     ...                        django.forms.models.ModelChoiceField
     queryset,                   # 查詢數據庫中的數據(寫model方法,該方法會在前端顯示object,需要去對應的model寫__str__)
     empty_label = "---------" ,    # 默認空顯示內容(比如下拉框第一行顯示"請選擇")
     to_field_name = None ,         # HTML中value的值對應的字段(注意是標簽中的value<option>)
     limit_choices_to = None       # ModelForm中對queryset二次篩選
     
ModelMultipleChoiceField(ModelChoiceField)
     ...                        django.forms.models.ModelMultipleChoiceField
 
 
     
TypedChoiceField(ChoiceField)
     coerce  =  lambda  val: val   對選中的值進行一次轉換(通常choice字段后端會受到字符串,如"1",但此處可以轉化 比如int)
     empty_value =  ''            空值的默認值
 
MultipleChoiceField(ChoiceField)
     ...
 
TypedMultipleChoiceField(MultipleChoiceField)
     coerce  =  lambda  val: val   對選中的每一個值進行一次轉換
     empty_value =  ''            空值的默認值
 
ComboField(Field)
     fields = ()                  使用多個驗證,如下:即驗證最大長度 20 ,又驗證郵箱格式
                                fields.ComboField(fields = [fields.CharField(max_length = 20 ), fields.EmailField(),])
 
MultiValueField(Field)
     PS: 抽象類,子類中可以實現聚合多個字典去匹配一個值,要配合MultiWidget使用
 
SplitDateTimeField(MultiValueField)
     input_date_formats = None ,   格式列表:[ '%Y--%m--%d' '%m%d/%Y' '%m/%d/%y' ]
     input_time_formats = None     格式列表:[ '%H:%M:%S' '%H:%M:%S.%f' '%H:%M' ]
 
FilePathField(ChoiceField)     文件選項,目錄下文件顯示在頁面中
     path,                      文件夾路徑
     match = None ,                正則匹配
     recursive = False ,           遞歸下面的文件夾
     allow_files = True ,          允許文件
     allow_folders = False ,       允許文件夾
     required = True ,
     widget = None ,
     label = None ,
     initial = None ,
     help_text = ''
 
GenericIPAddressField
     protocol = 'both' ,           both,ipv4,ipv6支持的IP格式
     unpack_ipv4 = False           解析ipv4地址,如果是::ffff: 192.0 . 2.1 時候,可解析為 192.0 . 2.1 , PS:protocol必須為both才能啟用
 
SlugField(CharField)           數字,字母,下划線,減號(連字符)(只能包含這些)
     ...
 
UUIDField(CharField)           uuid類型
     ...

 

class UserForm(forms.Form):
    user = fields.CharField(
        required=True,
        max_length=32,
        min_length=6,
        error_messages={}

    )
示例

 

2、Django內置插件:

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

常用選擇插件

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

在使用選擇標簽時,需要注意choices的選項可以從數據庫中獲取,但是由於是靜態字段 ***獲取的值無法實時更新***,那么需要自定義構造方法從而達到此目的。

方式一:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM