我正在編寫一個由其他人編寫的應用程序。它積極使用網站框架爲兩個不同的遊戲網站提供服務。這些網站上相同的代碼相同的數據庫上運行,: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