【发布时间】:2020-01-06 20:25:32
【问题描述】:
我构建了一个自定义验证器,用于检查用户输入是否存在于数据库中。现在我想添加一个自定义字段标志,如果验证不成功(无需重新渲染 html)就会弹出,类似于 InputRequired 验证器中的 'required' 标志。
这是我的验证器:
class ProjectExists(object):
field_flags = ('project_not_exists', ) # need the custom flag here
def __init__(self, project_code=None, message=None):
self.project_code = project_code
self.message = message
self.conn, self.cur = connect_db()
def __call__(self, form, field):
code = field.data
self.cur.execute("SELECT 1 FROM database WHERE project_code = '{}'".format(code))
code_check = self.cur.fetchall()
if not code_check:
if self.message is None:
self.message = field.gettext('Project code {} does not exists!'.format(code))
raise StopValidation(self.message)
这里是 InputRequired 验证器的源代码供参考:
class InputRequired(object):
field_flags = ('required', )
def __init__(self, message=None):
self.message = message
def __call__(self, form, field):
if not field.raw_data or not field.raw_data[0]:
if self.message is None:
message = field.gettext('This field is required.')
else:
message = self.message
field.errors[:] = []
raise StopValidation(message)
感谢您的帮助!
【问题讨论】:
-
'required' 标志使用浏览器的 HTML5 功能来执行客户端验证(如果浏览器不支持 HTML5,则回退到服务器端验证)。在您的需求中,如果您想避免重新呈现 html,则需要添加 JavaScript 功能以通过 Ajax 执行存在性测试。我将wtforms-parsleyjs 用于此类任务。
-
谢谢,我试试看。
标签: python validation flask flags wtforms