Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Deform的HTML控件中的报表后期处理错误消息_Python_Pyramid_Deform_Colander - Fatal编程技术网

Python 使用Deform的HTML控件中的报表后期处理错误消息

Python 使用Deform的HTML控件中的报表后期处理错误消息,python,pyramid,deform,colander,Python,Pyramid,Deform,Colander,允许在表单的不同字段上添加验证。但是,它检查表单本身是否有效,但这并不一定意味着表单处理将是有效的 例如,如果表单用于创建具有电子邮件地址的新用户。表单有效,但表单处理(包括在数据库中插入此新用户)会出现数据库完整性错误,表示已存在具有此电子邮件地址的用户 我知道我可以添加一个特殊的验证器来检查电子邮件是否已被使用,但是,在检查和提交第一个事务之间,可能会有另一个并发事务使用相同的电子邮件进行提交,这在最后不是100%安全的 那么,我怎样才能很好地向用户报告表单后处理错误呢 我可以很容易地报告表

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

例如,如果表单用于创建具有电子邮件地址的新用户。表单有效,但表单处理(包括在数据库中插入此新用户)会出现数据库完整性错误,表示已存在具有此电子邮件地址的用户

我知道我可以添加一个特殊的验证器来检查电子邮件是否已被使用,但是,在检查和提交第一个事务之间,可能会有另一个并发事务使用相同的电子邮件进行提交,这在最后不是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()}
模式:

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()}
查看:

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()}
希望这对你有帮助。
谢谢。

这不是后期处理,这只是正常的验证过程。我想做的是在
appstruct=form.validate(self.request.POST.items())
行之后发生错误时报告错误。