我想在 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
它的详细文档
您好,我是 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 它的详细文档