| |
| |
| from django import forms |
| from django.core.exceptions import ValidationError |
| |
| |
| class RegisterForm(forms.Form): |
| |
| |
| username = forms.CharField(min_length=3, required=True, error_messages={ |
| 'required': "用户名必须输入", |
| 'min_length': "用户名最小3个字符" |
| }) |
| |
| password = forms.CharField(min_length=6, required=True, error_messages={ |
| 'required': "密码必须输入", |
| 'min_length': "密码最小6个字符" |
| }) |
| |
| confirm = forms.CharField(min_length=6, required=True, error_messages={ |
| 'required': "密码必须输入", |
| 'min_length': "密码最小6个字符" |
| }) |
| |
| regtime = forms.DateTimeField(required=False, error_messages={ |
| 'invalid': '日期格式错误', |
| }) |
| |
| sex = forms.BooleanField(required=False) |
| |
| |
| 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 |
| |
2. views中验证
| def register(request): |
| if request.method == "POST": |
| |
| form = RegisterForm(request.POST) |
| |
| if form.is_valid(): |
| |
| data = form.cleaned_data |
| data.pop("confirm") |
| |
| |
| |
| |
| res = User.objects.create(**data) |
| if res: |
| return HttpResponse("注册成功") |
| else: |
| |
| return render(request, "register.html", {"form": form}) |
| |
| return render(request, "register.html") |
| |
3. 前端提交表单和展示错误信息
| <body> |
| <form action="{% url 'App04:register' %}" method="post"> |
| {% csrf_token %} |
| 用户名:<input type="text" name="username"> |
| {% for error in form.username.errors %} |
| {{ error }} |
| {% 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> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结