如何设计Django应用程序-最佳实践

3
在我之前开发的每个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')

这里出现了我的第一个问题。我的应用中每个用户都有一个一对一的 Member 对象。Member 对象存储有关用户的一些附加数据。每个单独的用户必须分配到组(我称之为团队)... 但等等... 应该将 团队 类移动到单独的应用程序中来管理团队吗?

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

另外,在注册新用户时,我需要为他创建一个新的团队。我应该把代码放在哪里?它既与用户管理又与团队管理相关。

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


另外,如果你想讨论更多“开放性”的Python/Django问题,欢迎来到Python聊天室。那里通常有人可以帮助你解决问题 :) - OldTinfoil
1个回答

4

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

您的扩展用户模型,带有团队功能,似乎是单个应用程序的一部分。您没有定义与团队或成员相关的特定于站点的行为。我还可以看到许多情况下您会重复使用上述代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接