不确定如何设计django应用程序 - 最佳实践

时间:2014-08-14 09:34:24

标签: python django design-patterns django-models django-apps

在我之前开发的每个django应用程序中,我只使用了一个应用程序,其中包含所有模型,表单等。 对于小型应用程序来说没问题,但是现在是时候以正确的方式做到了:)

我想拥有 auth 模块,该模块将涵盖用户注册,登录,欢迎电子邮件发送等内容。

所以...我创建了名为'auth'的应用程序。在auth.models模块中,我有类似的东西:

class BaseModel(models.Model):
    uuid = UUIDField()
    time_created = models.DateTimeField(auto_now_add=True, null=True)
    time_modified = models.DateTimeField(auto_now=True, null=True)

    class Meta:
        abstract = True


class Team(BaseModel):
    title = models.CharField(_('Team title'), max_length=64)   


class Member(BaseModel):
    user = models.OneToOneField(User)
    team = models.ForeignKey(Team)

    USER_ROLES = (
        ('admin',_('Administrator')),
        ('member',_('Team member')),
    )
    role = models.CharField(_('User role'), max_length=6, choices=USER_ROLES, default='member')

这是我的第一个麻烦。我的应用中的每个用户都将拥有一对一的成员对象。成员对象存储有关用户的一些其他数据。必须将每个用户分配到组(我称之为团队)...但是等待......不应该团队类移动到将管理团队的分离应用程序???

另外,我喜欢从BaseModel继承所有模型类。我是否必须再次在每个应用程序中添加相同的BaseModel类?是不是打破了“不要重复自己”的规则?

此外,在注册新用户期间,我需要为他创建新的团队。我应该在哪里放置代码?它与用户管理和团队管理有关。

我需要一些指导,如何解决这些设计问题。

1 个答案:

答案 0 :(得分:3)

应用程序旨在成为代码的自包含“模块”,可以在将来在其他django项目中重用。问问自己是否曾想在另一个项目中重复使用此代码。

您的扩展用户模型,团队会让我成为单个应用的一部分。您没有针对团队或成员定义特定于站点的行为。我还可以看到许多你重复使用上述代码的情况。