pinax.apps.accounts 和与配置文件基础项目一起安装的 idios 配置文件应用程序有什么区别?
据我了解, contrib.auth 应该仅用于身份验证目的(即用户名和密码),并且身份验证模型中 User.names 和 User.email 的存在是历史性的,不应使用这些字段;但是我忘记了帐户和个人资料之间的区别。为什么会有 pinax.apps.account 和 idios?
Pinax 帐户只是包含用户、时区和语言的包装器。user 是标准 django.auth 用户模型的外键关系。
class Account(models.Model):
user = models.ForeignKey(User, unique=True, verbose_name=_('user'))
timezone = TimeZoneField(_('timezone'))
language = models.CharField(_('language'), max_length=10, choices=settings.LANGUAGES, default=settings.LANGUAGE_CODE)
def __unicode__(self):
return self.user.username
idios Profile 模型基本上做同样的事情,但有一些自定义方法:
class ProfileBase(models.Model):
# @@@ could be unique=True if subclasses don't inherit a concrete base class
# @@@ need to look at this more
user = models.ForeignKey(User, verbose_name=_("user"))
class Meta:
verbose_name = _("profile")
verbose_name_plural = _("profiles")
abstract = True
def __unicode__(self):
return self.user.username
def get_absolute_url(self):
if idios.settings.MULTIPLE_PROFILES:
# @@@ using PK here is kind of ugly. the alternative is to
# generate a unique slug for each profile, which is tricky
kwargs = {
"profile_slug": self.profile_slug,
"pk": self.pk
}
else:
if idios.settings.USE_USERNAME:
kwargs = {"username": self.user.username}
else:
kwargs = {"pk": self.pk}
return reverse("profile_detail", kwargs=kwargs)
@classmethod
def get_form(cls):
return get_profile_form(cls)
def _default_profile_slug(cls):
return cls._meta.module_name
profile_slug = ClassProperty(classmethod(_default_profile_slug))
如果这是您所要求的,它们都不会复制 django.auth.User 的身份验证功能。看起来任何一个都不依赖于另一个。因此,如果您看不到它们两者的好用处,请选择有意义的那个。
配置文件旨在用于公共数据或您与其他人共享的数据,并且在性质上也更具描述性。
帐户数据更像是您帐户的设置,这些设置驱动您的某些行为(语言或时区设置),这些行为对您来说是私有的,并控制网站(或其他应用程序)的各个方面的功能。