Django Form one

前戏:

    FromData:三种方式获取FromData

    1. 创建一个FromData 的对象,然后再用append 的方法追个添加键值对

       var formdata = new FormData();

       formdata.append('name','mihon');

       formdata.append('url','/app01/login');

    2.获取form元素对象,将它作为参数传入FormData对象中!

        var formobj = document.getElementById('form');

        var formdata = new FormData(formobj);

    3.利用form 元素对象的getFormData方法生成。

        var formobj = document.getElementById('form');

        var formdata = formobj.getFormData()

       

     ajax upload file:

        1.processData设置为false。因为data值是FormData对象,不需要对数据做处理

        2.contentType设置为false,不设置contentType值,因为是由<form>表单构造的FormData对象,

          且已经声明了属性enctype="multipart/form-data",所以这里设置为false。

        3.<form>标签添加enctype="multipart/form-data"属性

        4.cache设置为false,上传文件不需要缓存。

        eg.

            <form id="uploadForm" enctype="multipart/form-data">

            <input id="file" type="file" name="file"/>

            <button id="upload" type="button">upload</button>

            </form>

           

            $.ajax({

                url: '/upload',

                type: 'POST',

                cache: false,

                data: new FormData($('#uploadForm')[0]),

                processData: false,

                contentType: false

                }).done(function(res) {

                }).fail(function(res) {});

       

 

source link:http://www.cnblogs.com/wupeiqi/articles/6144178.html

导入模块:

    from django.froms import From

    from django.froms import widgets

    from django.froms import fields

   

1.建立模板:

    class MyForm(From):

        user = fields.CharField(min_length=6)

       

    1.字段

        Field:

            require = True, 是否必填

            widget = {}, 插件

            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,              最小值

 

        DecimalField(IntegerField)

            max_value=None,              最大值

            min_value=None,              最小值

            max_digits=None,             总长度

            decimal_places=None,         小数位长度

           

        RegexField(CharField)

            regex,                      自定制正则表达式

            max_length=None,            最大长度

            min_length=None,            最小长度

            error_message=None,         忽略,错误信息使用 error_messages={'invalid': '...'}

           

       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': '...'}    

                   

           

        ModelChoiceField(ChoiceField)

            ...                        django.forms.models.ModelChoiceField

            queryset,                  # 查询数据库中的数据

            empty_label="---------",   # 默认空显示内容

            to_field_name=None,        # HTML中value的值对应的字段

            limit_choices_to=None      # ModelForm中对queryset二次筛选

            eg:

                使用django提供的ModelChoiceField和ModelMultipleChoiceField字段来实现

                from django import forms

                from django.forms import fields

                from django.forms import widgets

                from django.forms import models as form_model

                from django.core.exceptions import ValidationError

                from django.core.validators import RegexValidator

 

                class FInfo(forms.Form):

                    authors = form_model.ModelMultipleChoiceField(queryset=models.NNewType.objects.all())

        自定义验证规则:

            from django.forms import Form

            from django.forms import widgets

            from django.forms import fields

            from django.core.validators import RegexValidator

 

            class MyForm(Form):

                user = fields.CharField(

                validators=[RegexValidator(r'^[0-9]+$', '请输入数字'), RegexValidator(r'^159[0-9]+$', '数字必须以159开头')],

            )

       

    3.插件

        widgets.RadioSelect(choices=((1,'SH'),(2,'BJ'),))

        widgets.SelectFiled(choices=((1,'SH'),(2,'BJ'),)) #单选select

        widgets.MultipleChoiceFiled(choices=((1,'SH'),(2,'BJ'),)) #多选select

       

       

       

2.View 函数处理:

    obj = MyForm(request.Post)  #获取MyFrom 对象,封装了前端发送过来的数据

    obj.is_valid() #规则验证通过返回True,否则返回False

    obj.clean() #在验证通过之后获取,前端提交的数据

    obj.errors() #验证失败,获取错误信息

        obj.errors.as_json() #返回json 类型的错误信息

        obj.errors.data() #return 直接数据类型

       

3.HTML template处理

    {{obj.user}} #渲染input的标签

    {{obj.user.errors}}#渲染li标签,带有错误信息

    {{obj.errors.user.0}} #获取错误信息的字符串,<span>{{obj.errors.user.0}}<span/>

    其他标签:

        {{obj.user.label}}#生成label标签<!label = '用户名',默认label = 'False'>

        {{obj.user.label.id_for_label}}

        {{obj.user.label_tag}} #label_tag标签,click label 时选中input标签

       

自定义验证规则:

     from django import forms

     form django.forms import fields

     form django.forms import widgets

     from django.core.exceptions import ValidationError

     form django.core.validators import RegexValidator

    

     class FInfo(forms.Form):

        username = fields.CharField(max_length=5,

                                    vaidators=[RegexValidator(r'^[0-9]+$','Enter a ')])

       

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325134453&siteId=291194637