如何为Flask表单的两个字段添加额外自定义验证器,要求二者至少一个非空
WTForms 双字段至少一个非空自定义验证器实现
完全兼容你参考的自定义验证器类实现风格,具体代码和用法如下:
1. 自定义验证器类
from wtforms import ValidationError class AtLeastOneRequired: def __init__(self, peer_field, message=None): # 传入要校验的另一个字段的字段名 self.peer_field = peer_field self.message = message or f"当前字段与{peer_field}至少需要填写一个" def __call__(self, form, field): # 获取配对字段的实例 peer = form[self.peer_field] # 两个字段都为空时抛出验证错误 if not field.data and not peer.data: raise ValidationError(self.message)
2. 表单中使用示例
from flask_wtf import FlaskForm from wtforms import StringField, IntegerField, SubmitField class MyForm(FlaskForm): # 给其中一个字段绑定验证器,传入配对的字段名即可 phone = StringField('手机号', validators=[AtLeastOneRequired('email')]) email = StringField('邮箱') submit = SubmitField('提交')
补充说明
- 若需要自定义报错内容,初始化验证器时传入
message参数即可,示例:AtLeastOneRequired('email', message='手机号和邮箱不能同时为空') - 若需要两个字段都展示报错提示,可分别给两个字段都添加验证器,互相指向对方字段:
email = StringField('邮箱', validators=[AtLeastOneRequired('phone')]) - 验证逻辑会随表单默认校验流程自动触发,无需额外编写调用代码
内容的提问来源于stack exchange,提问作者Thatguyfromthething
相关产品推荐
相关产品推荐

