python - Flask WTForms——自定义字段标志
问题描述
我构建了一个自定义验证器,用于检查用户输入是否存在于数据库中。现在我想添加一个自定义字段标志,如果验证不成功(无需重新渲染 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)
感谢你的帮助!
解决方案
让它与Parsley一起使用,检查现有端点是否存在项目代码。
WT表格:
class ViewForm(FlaskForm):
project_code = StringField('Project Code',
render_kw={'required':"", 'data-parsley-project-check':""})
JavaScript:
$(function () {
Parsley.addValidator('projectCheck', {
validateString: function(value) {
console.log("validating")
var send = {
id: value,
}
var url = '/projects/'
return $.getJSON(url, send, function(data) {
}).then(function(json) {
if (!json['features']) {
return $.Deferred().reject()
}
})
},
messages: {
en: 'Project code does not exist!'
}
})})
推荐阅读
- flutter - BLE多连接
- javascript - 检索以字符串开头的数组项的有效方法
- c - 有什么方法可以使用 C 在终端上禁用仅指定字符的回显?
- java - 样式化 Vaadin 14 对话框的背景
- yaml - Jekyll:在 YAML Front Matter 中显示一个 Liquid 变量
- javascript - 我在 Visual Studio Code-JavaScript 中看不到输出
- docker - 将 kubernetes pod(在 GKE 上)挂载到谷歌云存储以保存数据
- android - 电子邮件意图不接受 HTML href 标记
- ios - iOS 15 RC UIWindow makeKeyAndVisible 会出现黑屏
- anylogic - Anylogic 给出了创建路径的错误