2011-03-04 48 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

相關問題