【问题标题】:NDB Validator Prop FieldsNDB Validator Prop 字段
【发布时间】:2015-02-14 08:19:19
【问题描述】:

我为我的 ndb stringProperties 推出了一个自定义验证器,以去除我网站的恶意代码。

def stringValidator(prop, value):
  lowerValue = value.lower()
  stripped = str(utils.escape(lowerValue))

  if stripped != lowerValue:
    raise datastore_errors.BadValueError(prop)

  return stripped

在其他地方,我发现了该错误并将失败返回给客户端。我希望能够返回验证失败的属性类型。

except datastore_errors.BadValueError as err:

如果我print(err) 我得到:

StringProperty('email', validator=<function stringValidator at 0x1079e11b8>)

我看到这个 StringProperty 包含我要返回的属性的名称:'email'。如何提取它?

编辑:Dmitry 给了我最重要的一半答案——为了在我传递 ._name 属性后访问错误对象的值,我需要使用:

str(err.args[0])

【问题讨论】:

    标签: python google-app-engine properties error-handling validation


    【解决方案1】:

    您可以通过_name属性获取属性名称。

    from google.appengine.ext import ndb
    
    def stringValidator(prop, value):
      lowerValue = value.lower()
      stripped = 'bla'
    
      if stripped != lowerValue:
        raise datastore_errors.BadValueError(prop._name)
    
      return stripped
    
    class Foo(ndb.Model):
      email = ndb.StringProperty(validator=stringValidator)
    
    Foo(email='blas')  # raises BadValueError: email
    

    更新:您还可以通过设置使用“人性化”属性名称

    email = ndb.StringProperty(validator=stringValidator, verbose_name='E-mail')
    

    在属性定义中,然后通过_verbose_name属性获取。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      相关资源
      最近更新 更多