• Django---forms表单使用(1)


    使用过Django的同学应该都比较清楚,Django的表单功能是十分强大的,可以完成数据的校验等功能。

    下面讲下常用的表单类型。我们讲下创建表单到前台可以正常显示的步骤:

    一、创建表单类(可以直接在views.py文件中创建,也可以自己再新建一个forms.py的模块,然后写到这个模块下,我是单独创建的forms.py),列了九种,也差不多使用的频率比较高的。

    from django import forms
    
    class TestForm(forms.Form):
        name = forms.CharField(label='单行输入',max_length=10)
        mulirow = forms.CharField(label="多行输入",max_length=100,widget=forms.Textarea)
        choice = forms.ChoiceField(label='选择框',choices=(
            ("learn","学习"),
            ("test","测试"),
            ("django","python"),
        ))
        bool = forms.BooleanField(required=False)
        urrf = forms.URLField(label="url格式")
        data=forms.DateField(label="日期格式")
        email = forms.EmailField(label="邮箱格式")
        file = forms.FileField(label="文件格式")
        imge = forms.ImageField(label="图片上传")

    二、在views.py里定义访问函数

    from django.shortcuts import render
    
    def learn_test(request):
        form = TestForm()
        return render(request,'test.html',{'form':form})

    三、编写test.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form>
        {% csrf_token %}
        {{ form.as_p }}
    </form>
    </body>
    </html>

    四、配置url

    from django.conf.urls import url
    from web import views
    
    urlpatterns = [
        url(r'^test/$',views.learn_test),
    ]

    五、启动服务然后前端访问

    在Terminal下启动服务:python manage.py runserver

    浏览器访问http://127.0.0.1:8000/test/

    浏览器正常显示:

    Django表单是带有很多参数的,上面的例子没有列太多。可以参考下面的参数说明:

    Field
        required=True,               是否允许为空
        widget=None,                 HTML插件
        label=None,                  用于生成Label标签或显示内容
        initial=None,                初始值
        help_text='',                帮助信息(在标签旁边显示)
        error_messages=None,         错误信息 {'required': '不能为空', 'invalid': '格式错误'}
        show_hidden_initial=False,   是否在当前插件后面再加一个隐藏的且具有默认值的插件(可用于检验两次输入是否一直)
        validators=[],               自定义验证规则
        localize=False,              是否支持本地化
        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)            时间间隔:%d %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,                  # 查询数据库中的数据
        empty_label="---------",   # 默认空显示内容
        to_field_name=None,        # HTML中value的值对应的字段
        limit_choices_to=None      # ModelForm中对queryset二次筛选
    
    ModelMultipleChoiceField(ModelChoiceField)
        ...                        django.forms.models.ModelMultipleChoiceField
    
    TypedChoiceField(ChoiceField)
        coerce = lambda val: val   对选中的值进行一次转换
        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类型
  • 相关阅读:
    dojo自定义Widget
    奇怪的JS
    Dojo Widget系统(转)
    JS 中Promise 模式
    Structs 原理图
    ArcGIS Engine Style文件操作
    dojo.hitch 原理
    Android:解决cannot find zipalign的问题
    Bootstrap:解决Bootstrap下拉框需要双击才能打开的问题
    Clojure:添加gzip功能
  • 原文地址:https://www.cnblogs.com/shuai1991/p/10763508.html
Copyright © 2020-2023  润新知