NDB验证器提议字段

时间:2014-12-16 04:31:42

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

我为我的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'。我该如何提取它?

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

str(err.args[0])

1 个答案:

答案 0 :(得分:3)

您可以按_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

更新:您还可以使用&#34;人性化的&#34;属性名称通过设置

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

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