xiangwang1

form组件 局部钩子和全局钩子

day67

一丶FORM的介绍

1.生成页面可用的HTML标签

2.对用户提交的数据进行校验

3.保留上次输入内容

二丶使用form组件实现注册功能

from django import forms  # 导入forms组件

# 按照Django form组件的要求自己写一个类
class RegForm(forms.Form):  # 继承Form
   name = forms.CharField(label="用户名")  # 在HTML就会生成一个文本框
   pwd = forms.CharField(label="密码")  
# 使用form组件实现注册方式
def register2(request):
   form_obj = RegForm() # 实例化一个自定义form组件类的对象
   if request.method == "POST":
       # 实例化form对象的时候,把post提交过来的数据直接传进去
       form_obj = RegForm(request.POST) # 自动html页面的数据以k:v形式传递给Form对象中
       # 调用form_obj校验数据的方法
       if form_obj.is_valid():  # is_valid() 是校验方法.错误信息是字典类型.有错误就是False
           return HttpResponse("注册成功")
   return render(request, "register2.html", {"form_obj": form_obj}) # 将form对象传递给前端
<body>
   <form action="/reg2/" method="post" novalidate autocomplete="off"> <!-- -->
      {% csrf_token %}     <!--生成 CSRFTOKEN -->
       
       <!--方式一: 通过传递的form对象, 获得每个属性. -->
      {{ form_obj.name.label }}   # name对象的lable属性
      {{ form_obj.name }}   # name对象
      {{ form_obj.name.errors.0 }} # name对象的错误信息. errors是一个错误列表.取第一个错误即可
       <div>
           <label for="{{ form_obj.name.id_for_label }}">{{ form_obj.name.label }}</label>
          {{ form_obj.name }} {{ form_obj.name.errors.0 }}
       </div>
       <div>
           <label for="{{ form_obj.pwd.id_for_label }}">{{ form_obj.pwd.label }}</label>
          {{ form_obj.pwd }} {{ form_obj.pwd.errors.0 }}
       </div>
       
       
       <!-- 方式二 -->
      {{form_obj.as_p}} # 展示所有的字段
       <p>
          {{form_obj.as_p}}
       </p>
       <div>
           <input type="submit" class="btn btn-success" value="注册">
       </div>
   </form>
</body>

总结:

{{ form_obj.as_p }}    # 展示所有的字段

{{ form_obj.user }}   # input框
{{ form_obj.user.label }}   # label标签的中文提示
{{ form_obj.user.id_for_label }} # input框的id
{{ form_obj.user.errors  }}   # 一个字段的错误信息
{{ form_obj.user.errors.0  }}   # 一个字段的第一个错误信息
{{ form_obj.errors  }}   # 所有字段的错误

三丶FORM组件

常用字段与插件

###  initial  默认值
class LoginForm(forms.Form):
   username = forms.CharField(
       min_length=8,
       label="用户名",
       initial="张三"  # 设置默认值
  )

   
   
### error_messages 重写错误信息
class LoginForm(forms.Form):
   username = forms.CharField(
       min_length=8,
       label="用户名",
       initial="张三",
       error_messages={
           "required": "不能为空",
           "invalid": "格式错误",
           "min_length": "用户名最短8位"
      }
  )

   
   
### password 修改input文本框的类型为密码类型
# attrs 设置属性(可以添加bootstrap样式)
   # render_value
class LoginForm(forms.Form):
   pwd = forms.CharField(
       min_length=6,
       label="密码",
       widget=forms.widgets.PasswordInput(attrs={\'class\': \'c1\'}, render_value=True)
  )
   

   
   
### radioSelect 单radio值为字符串
class LoginForm(forms.Form):
   gender = forms.fields.ChoiceField(
       choices=((1, "男"), (2, "女"), (3, "保密")),  # 在python中是 可供选择.存数据库的值为数字,显示在页面上的是 男/女
       label="性别",
       initial=3,
       widget=forms.widgets.RadioSelect()  # 设置这个input框的类型是 radio
  )    
   
   
   
### 单选Select
class LoginForm(forms.Form):
   hobby = forms.fields.ChoiceField(
       choices=((1, "篮球"), (2, "足球"), (3, "双色球"), ),
       label="爱好",
       initial=3,
       widget=forms.widgets.Select() # 设置显示的标签 select标签
  )
 


### 多选Select
class LoginForm(forms.Form):
   hobby = forms.fields.MultipleChoiceField(
       choices=((1, "篮球"), (2, "足球"), (3, "双色球"), ),
       label="爱好",
       initial=[1, 3],
       widget=forms.widgets.SelectMultiple() # 设置 select标签的属性 multiple多选
  )
   
   

### 单选checkbox
class LoginForm(forms.Form):
   keep = forms.fields.ChoiceField(
       label="是否记住密码",
       initial="checked",
       widget=forms.widgets.CheckboxInput()  #input的类型是 CheckBox单选框
  )
   
   
   
### 多选checkbox
class LoginForm(forms.Form):
   

分类:

技术点:

相关文章: