我目前正在使用Python在AppEngine上构建一个网站,我将在数据存储上存储一些信息。
我的所有信息都分为以下三个不同的类别:
1°/ - 文章(主页新闻条目)。 2°/ - 产品(产品页面描述条目)。 3°/ - 导航(包含所有标题菜单条目)。
现在,我将它们存储起来:
from google.appengine.ext import db
class article(db.Model):
title = db.StringProperty()
body = db.TextProperty()
author = db.StringProperty()
aside = db.StringProperty()
comment = db.StringProperty()
date = db.DateProperty(auto_now_add=True)
class navigation(db.Model):
title = db.StringProperty()
comment = db.StringProperty()
link = db.StringProperty()
class products(db.Model):
title = db.StringProperty()
body = db.TextProperty()
author = db.StringProperty()
aside = db.StringProperty()
comment = db.StringProperty()
date = db.DateProperty(auto_now_add=True)
我知道这不是优化的,正如您所看到的,我的产品类与文章相同。我想我可以从第一篇文章中得到它,或者从中扩展它,但我不确定。
所以我的问题是:
我是否需要使用命名空间? (我想明确地将文章与产品分开)。
这种数据存储的常用设计是什么?
我的文章正文属性永远不会超过50个单词,我怎么能限制stringProperty范围?我是否必须在调用此属性时设置它,或者是否有任何选项可以使用DB类的默认方法?
提前多多感谢。
答案 0 :(得分:1)
如果我理解:作者可以撰写/评论一篇关于一个(只有一个?)产品的文章,其中包含描述和其他属性,所以我想我们应该有这样的东西
class products(db.Model):
name_product = db.StringProperty() # For Example
description_product = db.StringProperty() # For Example
class article(db.Model):
my_product = db.ReferenceProperty(products, required=True)
# Properties of the article
title = db.StringProperty()
body = db.TextProperty()
author = db.StringProperty()
aside = db.StringProperty()
comment = db.StringProperty()
date = db.DateProperty(auto_now_add=True)
如果一篇文章涉及多个产品,那么您可以创建另一个数据库模型来映射文章和产品。由于可以在几篇文章中提及几种产品,我们将:
class products(db.Model):
name_product = db.StringProperty() # For Example
description_product = db.StringProperty() # For Example
class article(db.Model):
# Properties of the article
title = db.StringProperty()
body = db.TextProperty()
author = db.StringProperty()
aside = db.StringProperty()
comment = db.StringProperty()
date = db.DateProperty(auto_now_add=True)
class map_Article_Products(db.Model):
my_article = db.ReferenceProperty(article, required=True)
my_product = db.ReferenceProperty(products, required=True)
请注意db模型"文章"在这种情况下的变化
答案 1 :(得分:0)
限制为50个单词:创建自己的StringProperty变体,在存储之前验证此限制。有关详细示例,请参阅https://developers.google.com/appengine/articles/extending_models。