WEB框架Django之Form组件

Django的Form主要具有一下几大功能:

  • 生成HTML标签
  • 验证用户数据(显示错误信息)
  • HTML Form提交保留上次提交数据
  • 初始化页面显示内容

一 通过form实现校验字段功能

模型:models.py

   class UserInfo(models.Model):
        name = models.CharField(max_length=32)
        pwd = models.CharField(max_length=32)
        email = models.EmaillField()
        tel = models.CharField(max_length=32)

模板:register.html

<form action="", method="post">
        <p>用户名 <input type="text" name="username"></p>
        <p>密码<input type="password" name="password"></p>
        <p>确认密码<input type="password" name="repwd"></p>
        <p>邮箱<input type="text" name="email"></p>
        <p>手机号<input type="text" name="tel"></p>
        <input type="submit">
        {% csrf_token %}
</form>

二 通过form组件对模板进行渲染

form校验组件

from django import forms
class UserForm(forms.Form):
    username = forms.CharField(min_length=4)
    password = forms.CharField(min_length=4)
    repwd = forms.CharField(min_length=4)
    email = forms.EmailField()
    tel = forms.CharField

视图函数

def register(req):
    if req.method == 'POST':
    # form = UserForm({'name':'cs', 'email': '[email protected]', 'xxx':'harry'})
    form = UserForm(req.POST)       # 注意form表单的name属性值应该与forms组件字段名称一致
    print(form.is_valid())  # 返回布尔值
    if form.is_valid():
          print(form.cleaned_data)    # {"name":'cs", "email:'[email protected]'}
    else:
          print(form.cleaned_data)
          print(form.errors)          # {"name":["......"]}
         return  HttpResponse('ok')
                    '''
if 所有的字段校验成功,则form.cleaned_data以一个字典的形式存放所有校验通过的数据
                    '''
    return render(req, "register.html")

form组件在模板中渲染

 1 <form class="col-md-4  form-group" action="",method="post">
 2               <p>
 3                   用户名 {{ form.username }}
 4               </p>
 5               <p>
 6                   密码 {{ form.password }}
 7               </p>
 8               <p>
 9                   确认密码  {{ form.repwd }}
10               </p>
11               <p>
12                   email {{ form.email }}
13               </p>
14               <p>
15                   手机号 {{ form.tel }}
16               </p>
17 </form>
方式一
1 <form class="col-md-4  form-group" action="",method="post">
2                 {% csrf_token %}
3                 {% for filed in form %}
4                     <p>
5                         <lable>{{ filed.label }}</lable>
6                         {{ filed }}
7                     </p>
8                 {% endfor %}
9 </form>
方式二

 展示错误信息

<form  class="col-md-6" action="" method="post" novalidate>
    {% csrf_token %}
    {% for filed in form %}
          <p>
             <lable>{{ filed.label }}</lable>
              {{ filed }} <span>{{ filed.errors.0 }}</span>
           </p>
     {% endfor %}
      <input type="submit">
</form>

三 form组件的配置参数

Filed参数
            required=Ture                   是否必填
            widget=None                     HTNL插件
            label=None                      用于生成Label标签显示内容
            initial=None                    初始值
            help_text=''                    帮助信息(在标签旁边显示)
            error_messages=None             错误信息{'required':'不能为空’, 'invalid':'格式错误’}
            show_hidden_initial=False       是否在当前插件后再加一个隐藏的具有默认值的插件(可用于两次输入是否一致)
            validators=[],                  自定义验证规则
            localize=False                  是否支持本地化
            disabled=False                  是否可以编辑
            label_suffix=None               Lable内容后缀
        
        CharField(Field)
            max_length=None                最大长度
            min_length=None                最小长度
            strip=True                     是否移除用户输入空白
            
        IntergerField(Field)
            max_value = None            最大值
            min_value = None            最小值
        
        DecimalField(IntergerField)
            max_value=None                 最大值
            min_value=None                 最小值
            max_digits=None                总长度
            decimal_places=None            小数位长度
            
        BaseTemporalField(Field)        
            input_forats=None            时间格式化
        
        DateField(BaseTemporalField)      格式:2015-09-01
        TimeField(BaseTemporalField)      格式:11:12
        DateTimeField(BaseTemporalField)  格式:2015-09-01 11:12
        
        RegexField(charField)
            regex,                        自定义正则表达式
            max_length=None,              最大长度
            min_length=None,              最小长度
            error_message=None            {"invalid":"..."}
            
        FileField(Field)
            allow_empty_file=False        是否允许空文件
        
        ChoiceField(Field)
            choices=(),        选项,如:choices = ((0,'上海’),(1,,'北京')
            required=True      是否必填
            widget=None        插件,默认select插件
            label=None         Label内容
            initial=None       初始值
            help_text='',      帮助提示
        
        TypeChoiceField(ChoiceField)
            coerce = lambda val: val    对选中的值进行一次转换
            empty_value = ''            空的默认值
            
        ComboFiel(Field)
            fields=()           使用多个验证,如下:即验证最大程度20,又验证邮箱格式
                                fields.ComboField(fields=[fields.CharField(max_length=20),fields.EmailField(),]
                                
        GenericIPAddressField
            protocol='both',             both,ipv4,ipv6支持的IP格式
            unpack_ipv4=False            解析ipv4地址,如果是::ffff:192.0.0.2.1 可以解析为192.0.0.2.1
            
        SlugField(CharField)             数字,字母,下划线,减号(连接符)

在form中使用组件

from django.forms import widgets
class UserForm(forms.Form):
        username = forms.CharField(min_length=4, label='用户名',  error_messages={"required": "该字段不能为空"}, widget=
                        widgets.TextInput(attrs={'class':"form-control"}))
        password = forms.CharField(min_length=4, label='密码',widget=widgets.PasswordInput(attrs={'class':"form-control"}))
        repwd = forms.CharField(min_length=4, label='重复密码',widget=
                        widgets.TextInput(attrs={'class':"form-control"}))
        email = forms.EmailField(label='邮箱',  error_messages={"required": "该字段不能为空", "invalid":"格式输入错误"},
                                     widget=widgets.TextInput(attrs={'class': "form-control"})
                                     )
        tel = forms.CharField(label="电话号码",  error_messages={"required": "该字段不能为空"},
                                  widget=
                                  widgets.TextInput(attrs={'class': "form-control"})
                          )
        
        # label = '用户名'                                                                自定义字段的label
        # error_messages={"required": "该字段不能为空", "invalid":"格式输入错误"}            自定义错误消息输出
        # widget=widgets.PasswordInput(attrs={'class':"form-control"}                    设置input的类型并赋予属

猜你喜欢

转载自www.cnblogs.com/harryblog/p/9350818.html
今日推荐