使用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完成的