如何在Bootstrap/wtf模板中为flask_wtf的RecaptchaField自定义错误消息
解决Flask-WTF RecaptchaField自定义友好错误消息的最简方案
确实,RecaptchaField的验证是自动处理的,默认错误消息太技术化,想换成友好提示的话,最简洁的办法有两种,推荐第一种复用性更强的:
方法一:自定义RecaptchaField子类(推荐)
直接继承原RecaptchaField,重写它的error_messages属性,这样整个项目里的表单都能复用这个自定义字段,代码也干净:
from flask_wtf import FlaskForm from flask_wtf.recaptcha import RecaptchaField from wtforms import StringField, validators # 自定义带友好错误消息的验证码字段 class FriendlyRecaptchaField(RecaptchaField): error_messages = { 'invalid': '请完成验证码验证才能继续哦', 'missing': '别忘了完成验证码验证呀' } # 在你的表单里使用这个自定义字段 class MySubmitForm(FlaskForm): username = StringField('用户名', validators=[validators.DataRequired()]) recaptcha = FriendlyRecaptchaField()
这样不管是用户没勾选验证码(触发missing错误),还是验证码验证失败(触发invalid错误),都会显示你设置的友好提示,完全不用改模板,bootstrap/wtf.html会自动渲染这个自定义错误消息。
方法二:单个表单临时修改
如果只是某个特定表单需要改,不想单独写子类,也可以在表单初始化时直接修改字段的错误消息:
from flask_wtf import FlaskForm from flask_wtf.recaptcha import RecaptchaField from wtforms import StringField, validators class MySubmitForm(FlaskForm): username = StringField('用户名', validators=[validators.DataRequired()]) recaptcha = RecaptchaField() def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 直接替换当前字段的错误消息 self.recaptcha.error_messages = { 'invalid': '请完成验证码验证以提交', 'missing': '请完成验证码验证以提交' }
两种方法都能达到目的,第一种更适合全局统一使用友好提示的场景,第二种灵活度更高,看你的需求选就行。
内容的提问来源于stack exchange,提问作者user5228239
相关产品推荐
相关产品推荐

