zoukankan      html  css  js  c++  java
  • django form组件

    1,form 组件干的事情:
    1,自动生成input框
    2,对提交的数据进行校验
    3,有错误的信息
    2,定义一个form组件:
    form django import forms
    class RegForm(forms.Form):
    username = forms.CharField()
    pwd = forms.CharField()
    3,使用:
    后端使用:
    form_obj = RegForm()
    return render(request,'reg.html',{'form_obj':form_obj})
     
    form_obj = RegForm(request_POST)
    form_obj.is_vaild()
    form_obj.cleaned_data    ----->>>字典存放所有已经校验过得字段
    前端使用:
     
    {{form_obj.as_p}}   ---->>> 生成所有的input框
     
     
    {{form_obj.userename}} username的input框
    {{form_obj.user_name.label}}  username的标签显示文字
    {{form_obj.username.id_for_label}}  input框的ID
    {{form_obj.username.error}}   当前字段的所有的错误
    {{form_obj.username.error.0}}  当前字段的的第一个错误
     
    {{form_obj.errors}}    form表单的所有错误
     
    字段类型和参数
    1,
    CharField()
    ChoiceField()
    2,  参数:
    label 显示文本的长度
    initail  初始化的值
    min_length 最小的长度
    max_length 最大的长度
    required  是否必须
    error_messages  = {'min_legth':'太短了','required':''}
    widget = forms.widgets.PasswordInput(
    attrs:{'class':'form_control'}
    )
    validators = [验证器1,验证器2]
     
    3,验证:
    1,内置的验证:
    min_length
    max_length
    requeired
    2,自定义验证器:
    validators = [验证器1,验证器2]
     
    form django.core.validators import RegexValidator
    validator = [RexgexValidatior(r'1[3-9]d{9}','手机号不正经')]
     
    定义函数
    from django.core.exceptions import ValidationError
    def check(value):
    if 'alex' in vale:
    raise ValidationEorror('含有非法字符串')
    3,钩子函数:
    1,局部钩子
    clean_字段名(self):
    通过校验: 返回当前校验的值
    不通过: raise ValidationError('不通过')
    2,全局钩子
    clean(self):
    通过校验: self.cleaned_data
    不通过;
    self.add_error('re_pwd','两次的密码不一致')
    raise ValidationError('不通过')
     
     
     
     
                <div class="form-group {% if form_obj.username.errors %}has-error{% endif %}">  #这里用来判断有没有错误
                    <label for="{{ form_obj.pwd.id_for_label }}" class="col-sm-2 control-label">
                        {{ form_obj.pwd.label }}</label>
                    <div class="col-sm-10">
                        {{ form_obj.pwd }}
                        <span class="help-block">{{ form_obj.pwd.errors.0 }}</span>
                    </div>
                </div>
     
        <script>  #用来将错误消除,并且删除加的样式
            $("input").focus(function () {
                $(this).next().text("").parent().parent().removeClass('has-error')
            })
        </script>
     
     
     
    def clean_username(self):
        if 'alex' in self.cleaned_data['username']:
            raise ValidationError('含有非法字符串') #主动抛出错误
        return self.cleaned_data
     
    def clean(self):
        pwd = self.cleaned_data.get('pwd')
        re_pwd = self.cleaned_data.get('re_pwd')
       
        if re_pwd == pwd:
            return self.cleaned_data
        self.add_error('re_pwd','两次密码不一致') #加入到错误的字典
        raise ValidationError('两次密码不一致')
     
     
    在获取到多选和单选主动刷新:
     
        # gender = forms.ChoiceField(
        #     label='性别',
        #     choices=((1, '男'), (2, '女'), (3, '未知')),
        #     widget=widgets.RadioSelect())
        # hobby = forms.fields.ChoiceField(
        #     choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
        #     label="爱好",
        #     initial=3, 默认选择第三个
        #     widget=forms.widgets.Select()
        # )
        #
        # hobby2 = forms.fields.ChoiceField(
        #     # choices=(),
        #     required=False,
        #     label="爱好2",
        #     initial=3,
        #     widget=forms.widgets.SelectMultiple()
        # )
     
     
    def __init__(self, *args, **kwargs):
        #     super().__init__(*args, **kwargs)
        #     self.fields['hobby2'].choices = models.Hobby.objects.all().values_list('id', 'name')
    如果在添加更多的单选或者多选条件  那么:每次替换都会更改__init__其中的属性

  • 相关阅读:
    python list间的并集、差集与交集
    kafka常用命令,启动/停止/查看主题列表/消费/生产
    python json
    lrzsz
    HashMap实现原理,源码分析
    Java中try catch finally语句中含有return语句的执行情况
    Maven
    我的面试题
    JSON数据格式
    springMVC2
  • 原文地址:https://www.cnblogs.com/lnrick/p/9712876.html
Copyright © 2011-2022 走看看