Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django项目结构,跨应用程序共享扩展授权“用户”模型的推荐结构?_Python_Django_Django Models_Django Project Architect - Fatal编程技术网

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

Python Django项目结构,跨应用程序共享扩展授权“用户”模型的推荐结构?,python,django,django-models,django-project-architect,Python,Django,Django Models,Django Project Architect,我想知道,当用户模型被扩展/子分类,并在多个应用程序之间共享和使用这个结果用户模型时,常见的项目/应用程序结构是什么 我想在多个应用程序中引用相同的用户模型。 我还没有建立登录界面,所以我不确定它应该如何组合在一起 我想到以下几点: project.loginapp.app1 project.loginapp.app2 这种情况有共同的模式吗? 登录最好由“登录应用程序”处理吗 与此问题类似,但更具体。 更新 在上面阐明了我的用例。 我想添加字段扩展还是子类?到现有的身份验证用户模型。然后在

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

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

我想到以下几点:

project.loginapp.app1
project.loginapp.app2
这种情况有共同的模式吗? 登录最好由“登录应用程序”处理吗

与此问题类似,但更具体。

更新

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

您应该首先检查contrib.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) 

您应该首先检查contrib.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上的,尤其是关于,它会让你对如何组织你的项目有完全不同的想法。

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


查看YouTube上的,尤其是关于,它会让你对如何构建项目的想法完全不同。

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

如果要添加有关用户的更多信息,则不需要滚动自己的用户和身份验证系统。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.modelbend并将其设置为 您的身份验证在settings.py中结束


如果您想使用与django提供的不同的权限或组概念,那么没有什么可以阻止您。Django仅在我所知的Django.contrib.admin中使用这两个概念,您可以在认为合适的情况下自由使用其他一些概念来处理这些主题。

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

如果要添加有关用户的更多信息,则不需要滚动自己的用户和身份验证系统。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.modelbend并将其设置为 您的身份验证在settings.py中结束


如果您想使用与django提供的不同的权限或组概念,那么没有什么可以阻止您。Django仅在我所知道的Django.contrib.admin中使用这两个概念,您可以在您认为合适的主题中自由使用其他一些概念。

我同意。我想他们几乎把django的所有东西都命名错了。我同意。我认为他们在django中对几乎所有内容的命名都是错误的。+1:login-required只是视图函数上的一个修饰符。不是单独的应用程序,好的,谢谢!似乎我还没有完全明白这一点。有了这些额外的信息,你应该按照MacGuy的回答,并在个人资料部分查看django书。另外,我将使用一个代码段编辑我的答案,该代码段在创建用户时自动创建UserProfile。谢谢,我将添加django标记。+1:login required只是视图函数上的一个装饰符。不是单独的应用程序,好的,谢谢!似乎我还没有完全明白这一点。有了这些额外的信息,你应该按照MacGuy的回答,并在个人资料部分查看django书。另外,我将用一个片段编辑我的答案,该片段在创建用户时自动创建UserProfile。谢谢,我将添加django标记。您可能也应该添加django标记…被否决,很有趣。有没有更好的方法来处理使用用户模型进行扩展的问题?你不应该改变这个问题。最好加一个新的。编辑
是为了澄清/更新,而不是为了运行对话谢谢你的澄清。你可能也应该添加django标签…被否决,很有趣。有没有更好的方法来处理使用用户模型进行扩展的问题?你不应该改变这个问题。最好加一个新的。编辑是为了澄清/更新,而不是为了运行对话。感谢您的澄清。+1此外,您不一定需要使用内置的AUTH_PROFILE_模块及其帮助程序。如果您可以将用户设置分为不同的逻辑组件,那么每个组件都可以有自己的模型引用用户模型的外键。谢谢,这看起来像是在做我需要的事情!对于Profile.user.+1,我将使用具有相关名称的OneToOneField,而不是ForeignKey。此外,您不必使用内置的AUTH_Profile_模块及其帮助程序。如果您可以将用户设置分为不同的逻辑组件,那么每个组件都可以有自己的模型引用用户模型的外键。谢谢,这看起来像是在做我需要的事情!对于Profile.user,我将使用带有相关_名称的OneToOneField,而不是ForeignKey。