Django项目结构,推荐的跨应用程序共享扩展认证“用户”模型的结构?

2024-06-06 22:57:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

想到以下几点:

project.loginapp.app1
project.loginapp.app2

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

类似于这个问题,但更具体。 django application configuration

更新

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


Tags: 项目django用户模型project应用程序界面application
3条回答

你应该先检查出资人授权模块满足您的需求,因此您不必重新设计轮子:

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

编辑:

检查这个在创建新用户后创建UserProfile的代码段。在

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) 

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

查看YouTube上的2008 DjangoCon talks,尤其是关于reusable apps的内容,它会让你对如何构建你的项目有完全不同的想法。在

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

如果要添加有关用户的更多信息,则不需要创建自己的用户和身份验证系统。Django对此的看法相当可靠。用户管理位于django.contrib.auth公司. 在

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

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

然后设定

^{pr2}$

在你的设置.py在

设置此选项的优点是,您可以在视图中使用如下代码:

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

如果您试图为用户提供更多的身份验证方法,可以添加身份验证后端。扩展或重新实施django.contrib.auth公司.后端.ModelBackend并设置为 您的身份验证\u返回设置.py. 在

如果您想使用不同于django提供的权限或组概念,那么没有什么可以阻止您。Django只在django.contrib.admin(据我所知),你可以在你认为合适的情况下,为这些主题使用一些其他概念。在

相关问题 更多 >