【问题标题】:Uncertain how to design django apps - best practices不确定如何设计 django 应用程序 - 最佳实践
【发布时间】:2014-08-14 09:34:23
【问题描述】:

在我之前开发的每个 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 对象。成员对象存储有关用户的一些附加数据。每个用户都必须分配到组(我称之为 Team)...但是等等...不应该将 Team 类移动到将管理 Teams 的单独应用程序???

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

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

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

【问题讨论】:

  • 另外 - 如果您想讨论更多“开放式”Python/Django 问题,请随时访问Python chat。通常那里有人可以帮助您:)

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


【解决方案1】:

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

您的扩展用户模型(包含团队)会让我觉得它是单个应用程序的一部分。您没有针对团队或成员定义特定于站点的行为。我还可以看到很多情况下您会重复使用上述代码。

【讨论】:

    猜你喜欢
    • 2017-05-25
    • 2014-04-18
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    相关资源
    最近更新 更多