zoukankan      html  css  js  c++  java
  • 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 # )
  • 相关阅读:
    查询数据库中的相同值得所有表跟字段【存储过程】
    一些常用的SQL语句
    添加网站本地映射
    ReSharper 2016.3.2 Ultimate 官方最新破解版
    C# 利用VS自带的WSDL工具生成WebService服务类
    Linux环境下docker搭建wordpress应用
    Appium环境搭建
    内联以及外联css,js文件的理解
    前端雅虎23条理解
    docker安装和使用
  • 原文地址:https://www.cnblogs.com/506941763lcj/p/10127948.html
Copyright © 2011-2022 走看看