2

pinax.apps.accounts 和与配置文件基础项目一起安装的 idios 配置文件应用程序有什么区别?

据我了解, contrib.auth 应该仅用于身份验证目的(即用户名和密码),并且身份验证模型中 User.names 和 User.email 的存在是历史性的,不应使用这些字段;但是我忘记了帐户和个人资料之间的区别。为什么会有 pinax.apps.account 和 idios?

4

2 回答 2

3

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 的身份验证功能。看起来任何一个都不依赖于另一个。因此,如果您看不到它们两者的好用处,请选择有意义的那个。

于 2012-07-30T22:14:32.410 回答
1

配置文件旨在用于公共数据或您与其他人共享的数据,并且在性质上也更具描述性。

帐户数据更像是您帐户的设置,这些设置驱动您的某些行为(语言或时区设置),这些行为对您来说是私有的,并控制网站(或其他应用程序)的各个方面的功能。

于 2013-01-05T15:32:04.673 回答