Django学习笔记之form组件的局部钩子和全局钩子
本文通过注册页面的form组件,查看其中使用的全局钩子和局部钩子。
# Create your views here. class RegForm(forms.Form): username = forms.CharField( min_length=3, label="用户名", help_text=‘‘, error_messages={ "required": "不能为空", "invalid": "格式错误", "min_length": "用户名最短8位" } ) password = forms.CharField( min_length=3, label="密码", help_text=‘6~16个字符,区分大小写‘, error_messages={ "required": "不能为空", "invalid": "格式错误", }, widget=forms.widgets.PasswordInput ) re_password = forms.CharField( min_length=3, label="确认密码", help_text=‘请再次填写密码‘, error_messages={ "required": "不能为空", "invalid": "格式错误", }, widget=forms.widgets.PasswordInput) gender = forms.fields.ChoiceField( choices=((1, "男"), (2, "女"), (3, "保密")), label="性别", initial=3, widget=forms.widgets.RadioSelect ) phone = forms.fields.CharField( label="电话", error_messages={ "required": "不能为空", }, ) email = forms.fields.CharField( label=‘邮箱‘, help_text=‘6~18个字符,可使用字母、数字、下划线‘, widget=forms.widgets.EmailInput, error_messages={ "required": "不能为空", "invalid": "格式错误", }, ) # 批量给form表单里的字段加样式 def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for field in iter(self.fields): field_obj = self.fields[field] if not isinstance(field_obj, forms.fields.ChoiceField): field_obj.widget.attrs.update({‘class‘: ‘form-control‘}) # 全局钩子,此处用来判断两次输入的密码 def clean(self): pwd = self.cleaned_data.get(‘pwd‘) re_pwd = self.cleaned_data.get(‘re_pwd‘) if pwd != re_pwd: self.add_error(‘re_pwd‘, ‘两次密码不一致‘) raise ValidationError(‘两次密码不一致‘) else: return self.cleaned_data # 局部钩子函数,写给phone的校验函数 def clean_phone(self): phone = self.cleaned_data.get(‘phone‘) if not re.findall(‘^1[0-9]{10}$‘, phone): raise ValidationError("格式错误!") else: return phone
关于钩子函数:
源码里的 forms/forms.py
源码中的钩子函数应用
分类:
Django学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?