2. form组件使用

1. 校验前端来的数据

2. 生成页面的HTML标签

3. 保留上次输入的内容,清空密码

form类创建

from django import forms

class UserInfo(forms.Form):

  user = forms.CharField(max_length = 32)

  age = forms.InterField( )

  email = forms.EmailField( )

使用

fm = UserInfor({"user":"fu", "age":20, "email":"[email protected]"})

检查数据是否合法:fm.is_vaild( )  返回True 和 False

查看所有合法的数据  ret = fm.cleaned_data( )   用get获取到user, age , email的值

查看不合法数据和原因 ret = fm.error( )  

form标签渲染


1. {{  fm.as_p  }} 渲染出所有的表单 

2. {{  fm.user  }}, {{   fm.age  }}  渲染指定表单 可控性强 , 在表单类中指定 label属性 {{  fm.user.label  }}

3. 依靠循环写入

{%  for hm in fm  %}

  {{  hm.label  }}{{   fm  }}

  {{  hm.error  }}

{%  endfor  %}

在视图函数中, 传入前端的保存正确的校验数据 fm = fm.cleaned_data( )

在下一次输入的时候不用再次输入已经正确的数据

form标签添加css样式

from django import forms
class UserInfo(forms.Form):
  msg = {"required":"改字段不能为空"}   user
= forms.CharField(max_length = 32)
  age
= forms.InterField( )  
  email
= forms.EmailField( widget = widgets.TextInput(attrs={'class': 'form-control'}),
     label = "邮箱",
     error_msg = msg,
     initial = "默认值"
   )

此处给email标签添加了btn的css样式,字段为空时报错, 渲染时显示的默认值

钩子

from django import forms
from django.core.exceptions import ValidationError
# 登录表单 
class UserInfoForm(forms.Form):
  user
= forms.charField(max_length = 32)
  password
= forms.CharField(max_length = 32)
  email
= forms.EmailField( )
  
  
def clean_user(self):
    user
= self.cleaned_data.get("user")
    ret
= UserInfo.objects.filter(user=user) # 在数据库中查到数据
    if ret :
      return ret
    else:
      raise validateError("用户名不存在")

 

猜你喜欢

转载自www.cnblogs.com/fuyi2345/p/11404500.html