1

我想知道当用户模型扩展/子类化并且此结果用户模型在多个应用程序之间共享和使用时,常见的项目/应用程序结构是什么。

我想在多个应用程序中引用相同的用户模型。我还没有构建登录界面,所以我不确定它应该如何组合在一起。

想到以下几点:

project.loginapp.app1
project.loginapp.app2

这种情况有一个共同的模式吗?登录最好由“登录应用程序”处理吗?

类似于这个问题,但更具体。 django 应用程序配置

更新

澄清了我上面的用例。我想将字段(扩展或子类?)添加到现有的身份验证用户模型。然后在多个应用程序中引用该模型。

4

3 回答 3

7

你为什么要扩展用户?请澄清。

如果您要添加有关用户的更多信息,则无需滚动您自己的用户和身份验证系统。Django 的版本非常可靠。用户管理位于 django.contrib.auth。

如果需要自定义与用户一起存储的信息,首先定义一个模型如

class Profile(models.Model):
    ...
    user = models.ForeignKey("django.contrib.auth.models.User", unique=True)

然后设置

AUTH_PROFILE_MODULE = "appname.profile"

在你的 settings.py

设置它的好处是允许您在视图中使用这样的代码:

def my_view(request):
    profile = request.user.get_profile()
    etc...

如果您尝试为用户提供更多身份验证方式,则可以添加身份验证后端。扩展或重新实现 django.contrib.auth.backends.ModelBackend 并在 settings.py 中将其设置为您的 AUTHENTICATION_BACKENDS。

If you want to make use of a different permissions or groups concept than is provided by django, there's nothing that will stop you. Django makes use of those two concepts only in django.contrib.admin (That I know of), and you are free to use some other concept for those topics as you see fit.

于 2009-02-23T02:27:09.303 回答
3

您应该首先检查 contrib.auth 模块是否满足您的需求,因此您不必重新发明轮子:

http://docs.djangoproject.com/en/dev/topics/auth/#topics-auth

编辑:

检查这个在创建新用户后创建用户配置文件的片段。

def create_user_profile_handler(sender, instance, created, **kwargs):
    if not created: return

    user_profile = UserProfile.objects.create(user=instance)
    user_profile.save()

post_save.connect(create_user_profile_handler, sender=User) 
于 2009-02-23T02:22:59.673 回答
2

我认为“项目/应用程序”名称选择不当。它更像是“站点/模块”。例如,一个应用程序在没有视图的情况下可能非常有用。

查看YouTube 上的2008 DjangoCon 演讲,尤其是关于可重用应用程序的演讲,它会让你对如何构建项目有完全不同的看法。

于 2009-02-23T02:25:52.473 回答