在我之前开发的每个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类?是不是打破了“不要重复自己”的规则?
此外,在注册新用户期间,我需要为他创建新的团队。我应该在哪里放置代码?它与用户管理和团队管理有关。
我需要一些指导,如何解决这些设计问题。
答案 0 :(得分:3)
应用程序旨在成为代码的自包含“模块”,可以在将来在其他django项目中重用。问问自己是否曾想在另一个项目中重复使用此代码。
您的扩展用户模型,团队会让我成为单个应用的一部分。您没有针对团队或成员定义特定于站点的行为。我还可以看到许多你重复使用上述代码的情况。