django from组件
Posted lnrick
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django from组件相关的知识,希望对你有一定的参考价值。
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__其中的属性
以上是关于django from组件的主要内容,如果未能解决你的问题,请参考以下文章
Django auth组件拓展 关联外部信息---------------------------- Profile 模式