我想在 Django 社交应用登录后添加自定义字段

I want to add costume field after django social app login

您好,我是 php 开发人员 python/django

我正在使用 'social-auth-app-django' 库使用 django 创建一个社交登录,我按照以下教程来实现它。

https://simpleisbetterthancomplex.com/tutorial/2016/10/24/how-to-add-social-login-to-django.html

它工作正常,但我还需要在数据库中添加服装文件,这些文件将在不同的 table 但它会在创建新用户时添加。 我已将用户 table 扩展如下

from django.contrib.auth.models import User

class NewsCreator(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    CreatorLastLogs= models.CharField(max_length=100)
    CreatorLogs= models.CharField(max_length=100)

我想在创建新用户或现有用户登录时向这些字段添加数据。我尝试浏览文档,但找不到与代码 extension/customisation 等相关的任何内容。在此先感谢

你好,我已经找到了这个问题的答案,所以我 post 正在为以后 post 偶然发现这个问题的人服务。

django social 提供了管道来扩展他们的代码,我们只需要扩展这个管道 为此,在您的 setting.py 文件 post 以下列表中(此列表中的所有方法都是默认管道方法,最后一个方法除外)。

SOCIAL_AUTH_PIPELINE = (
    'social_core.pipeline.social_auth.social_details',
    'social_core.pipeline.social_auth.social_uid',
    'social_core.pipeline.social_auth.auth_allowed',
    'social_core.pipeline.social_auth.social_user',
    'social_core.pipeline.user.get_username',
    'social_core.pipeline.user.create_user',
    'social_core.pipeline.social_auth.associate_user',
    'social_core.pipeline.social_auth.load_extra_data',
    'social_core.pipeline.user.user_details',
    'newsapp.pipeline.save_profile'<-- this is your method
)

在您的应用程序中创建一个名为 pipeline.py 的文件,方法名称将在上面的列表中提供,就像列表中的最后一个字符串一样(newsapp 是我的应用程序的名称,提供您的应用程序名称)

在您的 pipeline.py 文件中

def save_profile(backend, user, response, *args, **kwargs):
    if NewsCreator.objects.filter(user_id=user.id).count() == 0 :
        newsCreator = NewsCreator.objects.create(user=user)
        //your logic for new fields 
        newsCreator.save()

如果您对 django-social 有任何其他疑问,可以参考 https://github.com/python-social-auth/social-docs 它的详细文档