博客
关于我
Django Form组件
阅读量:616 次
发布时间:2019-03-12

本文共 8442 字,大约阅读时间需要 28 分钟。

文章目录

使用Form组件验证

views:

from django.shortcuts import render, HttpResponsefrom django import forms# 先定义一个Form类class LoginForm(forms.Form):    name = forms.CharField(        label='用户名',        initial='陌生人',        strip=True,        error_messages={               'required': '用户名不能为空',        }    )    # 密码框    password = forms.CharField(        label='密码',        min_length=6,        widget=forms.PasswordInput(render_value=True),        error_messages={               'required': '密码不能为空',            'min_length': '密码不能小于6位',        }    )    # 单选框    gender = forms.ChoiceField(        choices=[(1, '男'), (2, '女'), (3, '保密')],        label='性别',        initial=3,        widget=forms.RadioSelect(),        error_messages={               'required': '请选择性别'        }    )    # 下拉单选    hobby = forms.ChoiceField(        label='爱好',        widget=forms.Select(),        choices=((1, '篮球'), (2, '足球'), (3, '乒乓球')),        initial=2,    )    # 多选    hobby2 = forms.MultipleChoiceField(        label='爱好2',        choices=((1, '摩托车'), (2, '汽车'), (3, '游艇')),        initial=[1, 3],        widget=forms.SelectMultiple()    )    # 单选checkbox    keep = forms.ChoiceField(        label='是否记住密码',        initial='checked',        widget=forms.CheckboxInput()    )    # 多选checkbox    city = forms.ChoiceField(        label='居住城市',        choices=[(1, '北京'), (2, '天津'), (3, '上海'), (4, '武汉')],        initial=4,        widget=forms.Select()    )# 写一个函数视图def login(request):    form_obj = LoginForm()    if request.method == 'POST':        form_obj = LoginForm(request.POST)        if form_obj.is_valid():            pass    return render(request, 'app/login.html', {   'form_obj': form_obj})

templates:

{% csrf_token %}

{ { form_obj.name }} { { form_obj.name.errors.0 }}

{ { form_obj.password }} { { form_obj.password.errors.0 }}

{ { form_obj.gender }} { { form_obj.gender.errors.0 }}

{ { form_obj.hobby }} { { form_obj.hobby.errors.0 }}

{ { form_obj.hobby2 }} { { form_obj.hobby2.errors.0 }}

{ { form_obj.keep }} { { form_obj.keep.errors.0 }}

{ { form_obj.city }} { { form_obj.city.errors.0 }}

常用Form组件内置字段

Field    required=True,               是否允许为空    widget=None,                 HTML插件    label=None,                  用于生成Label标签或显示内容    initial=None,                初始值    help_text='',                帮助信息(在标签旁边显示)    error_messages=None,         错误信息 {'required': '不能为空', 'invalid': '格式错误'}    validators=[],               自定义验证规则    localize=False,              是否支持本地化    disabled=False,              是否可以编辑    label_suffix=None            Label内容后缀CharField(Field)    max_length=None,             最大长度    min_length=None,             最小长度    strip=True                   是否移除用户输入空白 IntegerField(Field)    max_value=None,              最大值    min_value=None,              最小值DecimalField(IntegerField)    max_value=None,              最大值    min_value=None,              最小值    max_digits=None,             总长度    decimal_places=None,         小数位长度 DateField(BaseTemporalField)    格式:2015-09-01TimeField(BaseTemporalField)    格式:11:12DateTimeField(BaseTemporalField)格式:2015-09-01 11:12  RegexField(CharField)    regex,                      自定制正则表达式    max_length=None,            最大长度    min_length=None,            最小长度    error_message=None,         忽略,错误信息使用 error_messages={'invalid': '...'}ChoiceField(Field)    choices=(),                选项,如:choices = ((0,'上海'),(1,'北京'),)    required=True,             是否必填    widget=None,               插件,