2011-03-04 18 views
0

我正在编写一个由其他人编写的应用程序。它积极使用网站框架为两个不同的游戏网站提供服务。这些网站上相同的代码相同的数据库上运行,: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"它正在使用?

回答

1

即使我对网站框架没有太多经验,但我认为当您想要为所有网站使用相同的管理界面时,它们大多都很有意义。这是你甚至没有提到的要求。

最近我考虑使用它,但在一些inital编码之后,我决定反对它。事情变得非常迅速。如果处处有声明,我基本上只需要在一个站点上使用额外的字段,权限处理看起来很棘手,几乎所有你提到的都是。

我确定有是用于网站框架的使用情况,但是如果有疑问,我会去使用可重复使用的应用程序进行单独项目,在需要时可以对模型进行子类化。

+0

谢谢你,我认为你是对的。我将把代码分成两个项目。 – 2011-03-10 21:09:11

相关问题