django之form组件

form组件
from django import forms
from django.forms import widgets


class LoginForm(forms.Form):
username = forms.CharField(min_length=5,max_length=12
, error_messages={"required": "该字段不能为空"
,"min_length": "最少输入值"
, "invalid": "格式错误"} # 设置页面上的信息
) # -->最小长度,最大长度
password = forms.CharField(
widget=widgets.PasswordInput(attrs={"class": "xxx"}) # 设置input标签的type类型
# attrs设置input标签的属性
)
hobby = forms.CharField(
widget=widgets.Select(choices=(("value","标签的文本"),("value","标签的文本"))) # choices放元组
)

login_form = LoginForm() # --> 实例化一个对象

传递到HTML页面中去
{{login_form.username}} 渲染一个input标签
{{login_form.password}}

form_msg = LoginForm(request.POST) -->把前端的数据传递到类中,自动做校验,把数据传到对应的字段中去


form_msg.is_valid() --> 自动做校验,返回True的时候,表示符合数据形式,去数据库做校验
form_msg.cleaned_data={} --> 放符合的数据
去数据库做校验
errors = form_msg.errors={"key":["error1","error2"]} --> 放不符合的数据
把errors传到前端去,显示错误信息 ---> errors.username.0 (显示第一个错误信息)


未绑定的forms对象,没有数据
绑定的forms对象,有数据


form组件的钩子:自己设定一些规则,去校验数据
引入:from django.core.exceptions import ValidationError

局部钩子
def clean_user(self): 命名要clean_ + "要判断的字段名"
if not self.clean_data.get("user").isdigit(): --> 判断是否为纯数字
return self.clean_data.get("user").isdigit()
else:
raise ValidationError("错误信息") --> 不符合验证的时候,就返回error_messages中,页面上再去渲染

全局钩子
def clean(self):
# 重写父类方法,定义全局钩子
# 等所有的值都通过验证赋值之后,再判断
return self.cleaned_data
posted @ 2017-12-14 19:13  chitalu  阅读(76)  评论(0)    收藏  举报