1、reg.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页</title>
</head>
<body>
<form action="" method="post" novalidate>
{% csrf_token %}
<p>
<label for="{{ form_obj.username.id_for_label }}">{{ form_obj.username.label }}</label>
{{ form_obj.username }}
{{ form_obj.username.errors.0 }}
</p>
<p>
<label for="{{ form_obj.password.id_for_label }}">{{ form_obj.password.label }}</label>
{{ form_obj.password }}
{{ form_obj.password.errors.0 }}
</p>
<p>
<label for="{{ form_obj.gender.id_for_label }}">{{ form_obj.gender.label }}</label>
{{ form_obj.gender }}
{{ form_obj.gender.errors.0 }}
</p>
<p>
<label for="{{ form_obj.hobby.id_for_label }}">{{ form_obj.hobby.label }}</label>
{{ form_obj.hobby }}
{{ form_obj.hobby.errors.0 }}
</p>
<p>
<label for="{{ form_obj.phone.id_for_label }}">{{ form_obj.phone.label }}</label>
{{ form_obj.phone }}
{{ form_obj.phone.errors.0 }}
</p>
<button>注册</button>
</form>
</body>
</html>
2、views.py
from django.shortcuts import render, redirect, HttpResponse
from django import forms
from django.core.validators import RegexValidator
from django.core.exceptions import ValidationError
# 自定义检验函数
def check_username(value):
if 'alex' in value:
raise ValidationError('用户名含有非法字符,请重新选择')
class RegForm(forms.Form):
'''
initial:表示默认值;
min_length:设置用户名最小长度;
max_length:设置用户名最大长度;
error_messages:报错信息
required:字段是否可以为空,True或者False
disabled:是否可以编辑,False表示不允许编辑
label:生成label标签或显示内容
localize:是否支持本地化
help_text:帮助信息,在标签旁边显示
validators=[]:自定义验证规则
widget:html插件
'''
username = forms.CharField(label="用户名",
min_length=6,
initial="张三",
error_messages={
'required': '此字段是必填项',
'min_length': '用户名不能少于6位'
},
validators=[check_username, ]) # 自定义检验函数
password = forms.CharField(label="密码", widget=forms.PasswordInput)
gender = forms.ChoiceField(label='性别', choices=((1, '男'), (2, '女')), widget=forms.RadioSelect)
hobby = forms.fields.MultipleChoiceField(
choices=((1, '篮球'), (2, '足球'), (3, '双色球')),
label='爱好',
initial=3,
# widget=forms.widgets.Select() # 单选
widget=forms.widgets.SelectMultiple()
) # ChoiceField单选;MultipleChoiceField多选
phone = forms.CharField(
label="手机号码",
min_length=11,
max_length=11,
validators=[RegexValidator(r'^1[3-9]\d{9}$', '手机号格式不正确')],
) # 使用内置校验器
def reg(request):
form_obj = RegForm()
if request.method == 'POST':
form_obj = RegForm(request.POST)
if form_obj.is_valid(): # 对数据进行校验
# True,写入到数据库
pass
print(form_obj.cleaned_data) # 只有通过校验的数据
return render(request, 'reg.html', {'form_obj': form_obj})