Deform允许在表单的不同字段上添加验证.但是,它会检查表单本身是否有效,但这并不一定意味着表单处理有效.

例如,如果表单用于创建具有电子邮件地址的新用户.表单有效但表单处理(包括将此新用户插入数据库)会引发数据库完整性错误,表示已有用户使用此电子邮件地址.

我知道我可以添加一个特殊的验证器,用于检查电子邮件是否尚未使用但是仍然可能存在另一个并发事务,该事务具有在检查和第一个事务的提交之间提交的相同电子邮件,这不是100%安全的结束.

那么,我怎样才能很好地向用户报告表单处理后错误?

我可以轻松地报告表单旁边的错误消息(flash消息或其他),但我想知道是否有办法直接在小部件中报告错误,就像处理正常的验证错误一样.

解决方法:

我遇到了同样的情况,这就是我如何将错误提升为正常的验证错误.

验证方法:

def user_DoesExist(node,appstruct):

if DBSession.query(User).filter_by(username=appstruct['username']).count() > 0:

raise colander.Invalid(node, 'Username already exist.!!')

架构:

class UserSchema(CSRFSchema):

username = colander.SchemaNode(colander.String(),

description="Extension of the user")

name = colander.SchemaNode(colander.String(),

description='Full name')

extension = colander.SchemaNode(colander.String(),

description='Extension')

pin = colander.SchemaNode(colander.String(),

description='PIN')

视图:

@view_config(route_name='add_user', permission='admin', renderer='add_user.mako')

def add_user(self):

schema = UserSchema(validator = user_DoesExist).bind(request=self.request)

form = deform.Form(schema, action=self.request.route_url('add_user'), buttons=('Add User','Cancel'))

if 'Cancel' in self.request.params:

return HTTPFound(location = self.request.route_url('home'))

if 'Add_User' in self.request.params:

appstruct = None

try:

appstruct = form.validate(self.request.POST.items())

except deform.ValidationFailure, e:

log.exception('in form validated')

return {'form':e.render()}

希望这会帮助你.

谢谢.

标签:python,pyramid,deform,colander

来源: https://codeday.me/bug/20190709/1410229.html

html报告错误,使用Deform在HTML控件中报告表单后处理错误消息相关推荐

  1. 037——VUE中表单控件处理之表单修饰符:lazy/number/trim

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  2. HTML基本语法之表单标签:表单的组成 ,表单域,表单控件元素(表单元素) ,input表单元素, label标签, 表单控件(表单元素), select表单元素, textarea表单元素

    文章目录 表单标签 表单的组成 表单域 常用属性: 表单控件元素(表单元素) input表单元素 label标签 表单控件(表单元素) select表单元素 textarea表单元素 表单元素几个总结 ...

  3. js 拖拽生成html,js拖拽插件 js 拖拽控件生成自定义表单 怎么实现

    想请教一个js的问题,拖拽控件 js 拖拽控件生成自定义表单 怎么实现 说说步骤吧 监听mousedown事件 - 获取鼠标点击元素,判断是否可拖拽 - 设置flag做标记 - 建一个tempDOM, ...

  4. 下面哪些是html的表单控件,下列属于表单控件的是

    下面关于表单控件基本操作的陈述中,哪个是正确的 下面关于表单控件基本操作的陈述中,哪个是正确的 搜索资料 我来答 分享 微信扫一扫 网络繁忙请稍后重试 新浪微博 QQ空间 举报 浏览14 次 本地图 ...

  5. 一起学asp.net基础文章二 服务器控件、客户端控件和html表单控件

    首先解释一下这两个控件个概念. 所谓服务器控件 就是微软官方提供的如 textbox label dropdownlist等可以直接添加事件,属性 操作方式和winform类似的.net控件. 1.使 ...

  6. android tible控件_android自定义表单,表格控件TableRowTextView

    先上图: TableRowTextView----单元格宽度自适应[app:cell_mode="wrapContent"] 单元格宽度属性[app:cell_mode=wrapC ...

  7. JS对象迭代、事件处理器、表单控件绑定、表单复选框、表单单选按钮

    JS对象迭代 知识点 v-for v-for 循环JS对象,把对象内容循环显示到页面上. <div id="myApp"><h1>JS对象迭代</h1 ...

  8. 一步步学习微软InfoPath2010和SP2010--第十二章节--管理和监控InfoPath Form Services(IPFS)(4)--监控含图片控件的Products表单...

    如本章节前面提到的,你的IPFS表单表现没有你想象的好有很多可能的原因.一个最明显的原因是表单产生太多通信量(因为表单产生的HTML的大小).在许多你使用了大型.笨拙表单的许多方法中,最常见的是让用户 ...

  9. excel 表单控件 按钮_Excel表单控制按钮怪癖

    excel 表单控件 按钮 If you're building an Excel workbook for other people to use, you can add form control ...

最新文章

  1. mysql 查看数据库占用空间的大小
  2. Vbs脚本编程简明教程之十
  3. TCP listen()函数内幕
  4. Qt Creator创建自定义效果和材质
  5. 博客园在升级的路上,不妨更自信些,同时说说我们可以为博客园做些什么
  6. lua 从一串数字中取出偶数位的数字_为什么JavaScript中 0.1 0.2 不等于0.3?
  7. SQL Server中行列转换 Pivot UnPivot (转载)
  8. hive入ES5.6.8
  9. LaTeX设置参考文献条目行距以及条目内行距的方法
  10. 计算机视觉目标检测算法总结5——RCNN系列算法
  11. 小说和散文在写作语言(表达方式等)方面究竟有多大不同?
  12. 数据分析师必学第一课:构建完整的指标体系
  13. c++ map 析构函数_面向偷懒的编程 - C/C++项目中使用Go的分布式系统库
  14. error LNK2005
  15. NLP-文本挖掘-综述
  16. db2 matlab实现,MATLAB MIMO-OFDM无线通信技术及 实现一书的源码和配套英文书267万源代码下载- www.pudn.com...
  17. 我们应如何迎接新式客服业到来?
  18. Huffman树(哈夫曼树)
  19. 计算起始时间与结束时间之间有哪些月份和周数
  20. CorelCAD 2019.5 v19.1.1.2035破解版下载【Win+Mac+注册机】

热门文章

  1. yolov5从入门到精通
  2. opencv c++ 轮廓逼近与拟合
  3. CentOS7 安装并使用SQL Server
  4. apache POI导出excel文件 及单元格合并 、样式的设置
  5. 学习July博文总结——支持向量机(SVM)的深入理解(上)
  6. 台式计算机硬件输入设备,台式电脑硬件配置有哪些
  7. vmware虚拟机出现桥接网络不稳定,连接不上,宿主机网络正常
  8. 批量DICOM转jpg格式
  9. sybase基础知识(新手必看)
  10. [python]写一个含蓄表白器加密神器,拿去试试?