我正在编写一个由其他人编写的应用程序。它积极使用网站框架为两个不同的游戏网站提供服务。这些网站上相同的代码相同的数据库上运行,:Django站点框架适合用于服务具有不同逻辑和模型结构的站点吗?
class Entry(models.Model):
headline = models.CharField(max_length=100)
body = models.TextField()
created = models.DateTimeField()
creator = models.ForeignKey(User)
# Site1 fields
best = models.BooleanField()
is_editor_post = models.BooleanField()
site1_views = models.IntegerField()
cnt_comments = models.IntegerField()
last_edit = models.DateTimeField()
editor = models.ForeignKey(User)
tags = models.ManyToManyField(Tag)
# Site2 fields
category = models.ForeignKey(Category)
blog = models.ForeignKey(Blog)
site2_views = models.IntegerField()
class Game(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
genre = models.ForeignKey(Genre)
release_date = models.DateField()
platform = models.ForeignKey(Platform)
# Site1 fields
mark = models.IntegerField()
badges = models.ManyToManyField(Badge)
badges_updated = models.DateTimeField()
# Site2 fields
requirements = models.CharField(max_length=255)
status = models.IntegerField()
has_news = models.BooleanField()
has_articles = models.BooleanField()
has_screenshots = models.BooleanField()
class Meta:
permissions = (
('site1_add_game', 'Site1/Can add game'),
('site2_add_game', 'Site2/Can add game'),
)
正如你可以看到,有一堆领域,无用的网站之一。另外,我们不使用默认权限,而是创建自己的权限。这是因为两个站点之间共享用户,一个用户可以有权在两个站点上添加游戏,而另一个用户只能将其添加到站点2上。
也有在视图中,模型和方法,经理像这样大量的代码:
def get_related_entries(self):
if settings.SITE_ID == 1:
# code for finding related entries on site1
elif settings.X_SITE_ID == 2:
# code for finding related entries on site2
return entries
所以,当我在site1的代码工作,从站点2中的字段和代码只是困惑我。 如果我添加一个功能到第一个网站,通常我不需要另一个功能。另外我可能不得不编写第三个站点,他们希望这个站点运行在相同的代码和数据库上。为什么?因为他们认为这可以让代码在不同网站之间重复使用和共享内容。这听起来很不错,而且真的有一堆代码,这些代码在这些网站中很常见。但是,在同一代码上运行它们的站点逻辑和模型结构也有很大差异。
该代码非常难以维护,而且看起来很丑陋而且不直截了当。解决方案可能是将常用应用程序和特定于站点的应用程序分开。但几乎所有应用程序都有特定于站点的代码。如果我有两个不同的项目,每个项目都有自己的代码和模型,我认为会更简单。
那么,网站框架在这里适合吗?什么时候适合?为什么Django "strongly encourages"它正在使用?
谢谢你,我认为你是对的。我将把代码分成两个项目。 – 2011-03-10 21:09:11