使用google django创建社交身份验证功能

使用google django创建社交身份验证功能,django,django-rest-framework,Django,Django Rest Framework,你好,我是一个新手,有一个任务要做,我尝试过简单的社会认证,但下面有点复杂: Create a social authentication functionality with google and add user in a database. After adding user in a database, customer should also be created using django signals. Note:- Customer is one to one related w

你好,我是一个新手,有一个任务要做,我尝试过简单的社会认证,但下面有点复杂:

Create a social authentication functionality with google and add user in a
database. After adding user in a database, customer should also be created
using django signals.
Note:- Customer is one to one related with user?

My型号.py

class Buddy(models.Model): 
    user_name=models.CharField(max_length=200,blank=True,null=True) 

    def __str__(self): 
        return str(self.user_name) 


class Customer(models.Model): 
    customer_name=models.OneToOneField(Buddy,
                                       on_delete = models.CASCADE,
                                       blank=True,null=True) 
    def __str__(self): 
         return str(self.customer_name) 
Mysettings.py包括以下几行:

SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = '2377[...].apps.googleusercontent.com' 
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = '[...]' 
SOCIAL_AUTH_GOOGLE_OAUTH2_SCOPE = ['email'] 
INSTALLED_APPS = [ ... # oauth 
                  'oauth2_provider', 
                  'social_django', 
                  'rest_framework_social_oauth2' ] 

AUTHENTICATION_BACKENDS = ( # Google OAuth2 
   'social_core.backends.google.GoogleOAuth2', 
    # django-rest-framework-social-oauth2                            
   'rest_framework_social_oauth2.backends.DjangoOAuth2', # Django 
   'django.contrib.auth.backends.ModelBackend', ) 

您必须使用Django的post_save信号

在您的型号中.py具有:

class Buddy(models.Model): 
    user_name=models.CharField(max_length=200, blank=True, null=True) 

    def __str__(self): 
        return str(self.user_name) 


class Customer(models.Model): 
    # This translates into buddy_id when you migrate
    buddy=models.OneToOneField(Buddy,on_delete = models.CASCADE,
                               blank=True, null=True) 
    customer_name = models.CharField(max_length=200, blank=True, null=True) 

    def __str__(self): 
        return str(self.customer_name) 
在您的视图中.py确保

from django.shortcuts import render
from django.db.models.signals import post_save
from .models import Buddy
from .callbacks import save_customer

# You'll customize this view to read any parameters and provide user_name
def custom_view(request):
     Buddy.objects.create(user_name="SomeUsername")
     # Any of your other logic comes here, specify in the dict 
     return render(request, 'yourpage.html', {})


# This should be at the bottom of your views.py:
post_save.connect(save_customer, sender=Buddy)
然后在同一位置创建一个名为callbacks.py的新文件,其中包括:

from .models import Buddy
from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=Buddy)
def save_customer(sender, instance, **kwargs):
    # Customize your OneOnOne model on a meaningful way so it will be useful
    customer = Customer.objects.create(customer_name=instance.user_name) 
    instance.customer = customer
    instance.customer.save()

了解更多关于Django信号的信息。

到目前为止,您尝试了哪些?向我们展示一些以.class Buddy(models.Model)开始的代码:user_name=models.CharField(max_length=200,blank=True,null=True)def_ustr(self):return str(self.user_name)class Customer(models.Model):Customer_name=models.OneToOneField(Buddy,on_delete=models.CASCADE,blank=True,null=True)def_ustr(self):return str(self.customer_name)SOCIAL_AUTH_GOOGLE_OAUTH2_KEY='2377[…]apps.googleusercontent.com'SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET='[…]SOCIAL_AUTH_GOOGLE_OAUTH2_SCOPE=['email']已安装的_apps=[…#OAUTH2提供者'、'SOCIAL(django'、'rest_framework_SOCIAL_OAUTH2']身份验证\'u2'](#Google OAuth2'social_core.backends.Google.Google OAuth2',#django-rest-framework-social-OAuth2'rest_-framework'u-social_-OAuth2.backends.django'django.contrib.auth.backends.modelbend',)我无法处理视图我已尝试通过直接html页面重定向,但这是使用api完成的