-
forms.py
from django import forms from django.core.exceptions import ValidationError from django.forms.utils import ErrorList class RegisterForm(forms.Form): def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=ErrorList, label_suffix=None, empty_permitted=False, field_order=None, use_required_attribute=None, renderer=None,request=None): super().__init__(data,files,auto_id,prefix,label_suffix,empty_permitted,field_order,use_required_attribute,renderer) self.request = request username = forms.CharField(min_length=3,required=True,error_messages={ 'required':'用户名必须输入', 'min_length':'用户名至少3个字符' }) password = forms.CharField(min_length=3,required=True,error_messages={ 'required': '密码名必须输入', 'min_length': '密码至少3个字符' }) confirm = forms.CharField(min_length=3,required=True,error_messages={ 'required': '密码名必须输入', 'min_length': '密码至少3个字符' }) regtime = forms.DateTimeField(required=False,error_messages={ 'invalid':'日期格式错误', }) sex = forms.BooleanField(required=False) # 单个字段验证: clean_xxxx def clean_password(self): password = self.cleaned_data.get('password') if password and password.isdigit(): raise ValidationError("密码不能是纯数字") return password # 全局验证 def clean(self): password = self.cleaned_data.get('password',None) confirm = self.cleaned_data.get('confirm','') print(password,confirm) if password != confirm: raise ValidationError({'confirm':"两次密码输入不一致"}) return self.cleaned_data
-
views.py
from django.contrib.auth import authenticate, login,logout from django.contrib.auth.decorators import login_required from django.http import HttpResponse from django.shortcuts import render, redirect # Create your views here. from django.urls import reverse from App02.forms import RegisterForm from App02.models import User def register(request): if request.method == "POST": # 用提交的数据生成表单 form =RegisterForm(request.POST) # 能通过验证,返回True,否则返回False if form.is_valid(): # 进行业务处理 data = form.cleaned_data data.pop("confirm") # 获取指定字段 # username = form.cleaned_data.get('username','') # print(data,type(data)) # 如果forms中表单的字段名和models模型的字段名一致 res = User.objects.create(**data) # 如果forms中表单的字段名和models模型的字段名不一致 # res = User.objects.create(username=username,password=form.cleaned_data.get('password')) if res: return HttpResponse("注册成功") else: print(form.__dict__) # 验证不成功,把错误信息渲染到前端页面 return render(request, "register.html",{'form':form}) return render(request,"register.html")
-
html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>注册</title> </head> <body> <form action="{% url 'App02:user_register' %}" method="post"> {% csrf_token %} 用户名:<input type="text" name="username"> {% for error in form.username.errors %} <span>{{ error }}</span> {% endfor %} <br> 密码:<input type="password" name="password"> {{ form.password.errors }} <br> 确认密码:<input type="password" name="confirm"> {{ form.confirm.errors }} <br> 注册时间:<input type="text" name="regtime"> {{ form.regtime.errors }} <br> 性别:<input type="radio" name="sex" value="0">女 <input type="radio" name="sex" value="1"> 男 {{ form.sex.errors }} <br> <input type="submit" value="注册"> </form> </body> </html>
Django—Form表单-重写验证(注册案例)
猜你喜欢
转载自blog.csdn.net/piduocheng0577/article/details/105019839
今日推荐
周排行