Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.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_Python Social Auth_Django Socialauth - Fatal编程技术网

Python 在社交应用程序Django中扩展用户模型或自定义管道

Python 在社交应用程序Django中扩展用户模型或自定义管道,python,django,django-models,python-social-auth,django-socialauth,Python,Django,Django Models,Python Social Auth,Django Socialauth,我正在用django 1.11(不使用Mongo)实现(不是不推荐的;依赖Python social auth的)。我的应用程序需要存储和处理用户的大量数据,而不是登录时从他们的社交媒体帐户获取的数据 当用户进行身份验证时,我不需要获取或收集任何额外的数据,但是他们在我的站点上执行的各种操作需要保存到他们的用户模型中。我想知道以下哪种方法是首选的(我在网上搜索了很多,但是找不到一个具体的解释来解释为什么使用一种方法和另一种方法): 在我的应用程序的models.py(称之为MyUser)中创建

我正在用django 1.11(不使用Mongo)实现(不是不推荐的;依赖Python social auth的)。我的应用程序需要存储和处理用户的大量数据,而不是登录时从他们的社交媒体帐户获取的数据

当用户进行身份验证时,我不需要获取或收集任何额外的数据,但是他们在我的站点上执行的各种操作需要保存到他们的用户模型中。我想知道以下哪种方法是首选的(我在网上搜索了很多,但是找不到一个具体的解释来解释为什么使用一种方法和另一种方法):

  • 在我的应用程序的models.py(称之为
    MyUser
    )中创建我自己的用户模型,该模型不扩展任何特殊功能,然后在身份验证管道中添加一个函数,将社交应用程序django用户与
    MyUser
    的相应实例相关联。保持
    AUTH\u USER\u MODEL
    SOCIAL\u AUTH\u USER\u MODEL
    不变

    或者

  • 在我的应用程序的models.py和项目的settings.py集合
    AUTH_user_model
    SOCIAL_AUTH_user_model
    中创建我自己的用户模型,指向
    MyUser
    。保持管道不变。在本例中,我想知道是否有人可以澄清
    MyUser
    及其管理器应该扩展什么,以及我需要在modules.py中导入什么(我很困惑,因为很多堆栈溢出帖子都是指这个模块的不推荐版本,我不断出错)。此外,在这种情况下,我应该同时设置
    AUTH\u USER\u MODEL
    社会性的
    AUTH\u USER\u MODEL
    ,还是只设置其中一个

这两种方法基本上实现了相同的目标吗?出于某种原因,是否有一个更可靠/更受欢迎?或者,我应该两者都做吗?非常感谢您的帮助


另一个细节:我希望能够访问用户数据库不仅从应用程序我目前正在建设,而且从其他应用程序(在同一Django项目),我将在未来建立。这会影响什么吗?

因为我看到这有相当多的视图,所以我将发布我最终找到的解决方案

django
social app django
(或任何其他社交身份验证模块)都使用默认的
User
模型进行身份验证。虽然可以编辑此模型以添加自定义参数,但我不建议这样做。它不是很好的抽象或模块化。如果在配置模型时出错,不仅会破坏站点上的特定功能,还可能破坏身份验证本身

我能想到的唯一一种情况是,如果您需要进行影响身份验证流本身的更改(例如,添加您自己的自定义身份验证提供程序),则需要编辑默认用户模型本身。

创建名为
UserProfile
的新模型更容易、更安全,它与
User
对象具有所需的一对一关系。现在,您可以将
User
对象视为身份验证部分,将
UserProfile
对象视为内容/存储部分。您不必经常使用
User
模型,而且
UserProfile
模型对于身份验证来说并不重要。请注意,在此配置中,您不需要更改settings.py文件中的
AUTH\u USER\u MODEL
SOCIAL\u AUTH\u USER\u MODEL
字段


如果采用这种方法,您将需要在身份验证管道中添加一个自定义步骤,在该步骤中,您将创建一个新的
UserProfile
对象,并将其与当前登录的
用户关联。

您不认为可以从
social\u django
模块扩展
UserSocialAuth
?如何以兼容的方式实现这一点?