App Engine - 为什么有PhoneNumber,Link,Rating等课程?

时间:2009-12-06 18:22:28

标签: google-app-engine google-cloud-datastore

我没有找到任何存在一些App Engine类的原因。有一个PhoneNumber,一个Link,一个PostalAddress,一个GeoPt,一个等级等等。为什么这些给予特殊待遇?他们似乎没有任何智慧 - 例如地理搜索。我知道Link比String属性有更多的空间,但其余的?

请参阅: http://code.google.com/appengine/docs/java/datastore/dataclasses.html

4 个答案:

答案 0 :(得分:7)

这些类型是“语义”类型。它们存在于Java API中,与Python API保持一致。在Python API中,它们定义了与.to_xml()方法相关的特殊行为 - 例如,PhoneNumberProperty序列化如下:

<property name="foo" type="gd:phonenumber"><gd:phoneNumber>12345-678</gd:phoneNumber></property>

答案 1 :(得分:2)

我认为他们主要是为了报道常见案例并节省开发人员的时间。如果许多应用程序使用电话号码字段,为什么要求每个开发人员必须编写它们?如果开发人员需要/想要,他们仍然可以自己编写。

答案 2 :(得分:2)

不确定java,但在python中,以下模型/代码(在dev服务器上测试)将抛出BadValueError,并显示消息“Invalid URL:stackoverflow.com”

class foo(db.model):
    link = db.LinkProperty()

bar = foo()
bar.link = 'stackoverflow.com'

虽然:

bar.link = 'http://stackoverflow.com'

工作正常。

我没有测试过,但其他属性可能会也可能不会进行验证。

答案 3 :(得分:1)

基本上,在模型中使用此类型可以将间接元数据添加到代码中。如果您正在为模型类使用任何类型的通用渲染器,或者您正在模型上执行用户输入验证,这可能很有用。

例如,如果您对名为userNumber的字段使用PhoneNumber类型,则基于反射的渲染器可能会理解它应该自动将相应的验证器分配给将代表它的文本字段。

此致 保尔。