我从过去的4-5个月开始使用django,最近开始学习django- REST -framework,我对正确的身份验证系统感到困惑,实际上我正在尝试建立一个主要使用REST API的应用程序,因为我的客户端可以是浏览器和安卓,所以我需要一个身份验证系统,其中用户可以使用django内置身份验证(django.contrib.auth.model.User)以及第三方社交身份验证(谷歌,Facebook等)。
现在,我对如何创建我的数据库感到困惑,因为当我创建一个表/模型时,假设创建一个'Book',那么这个模型需要一个指向用户模型的外键,这里的用户既可以是'django.contrib.auth.model.User‘,也可以是使用第三方身份验证注册的用户。
那么我将如何在我的模型的外键字段中引用用户呢?
我还决定定制django的buit-in身份验证,因为我希望用户使用他们的电子邮件而不是用户名登录。
class Book(models.Model):
title = models.CharField(...)
author = models.ForeignKey(?) ? Here, how do i refer to both
'django.contrib...User' and users signed-up
using thrid-party auth.发布于 2016-10-29 06:56:43
让我详细解释一下你的问题。首先:你很幸运。有一个(几乎)开箱即用的版本可以解决你的问题。
对于社交和正常的身份验证和注册,包括电子邮件验证等,您可以依赖django-allauth:
https://github.com/pennersr/django-allauth
django-restauth提供了一个构建在all-auth之上的restful平台,因此您甚至不必从头开始构建auth rest api:
https://github.com/Tivix/django-rest-auth
当涉及到db模式时,有几个选项。您可以继续构建自己的身份验证系统,在我看来,这有点过头了。更重要的是,我将实现一个配置文件模型,它与django.contrib.auth.models.User中的用户模型具有OneToOne关系,如Django文档的this chapter中所述。
您的模型(当然在单独的应用程序中)将如下所示:
from django.contrib.auth.models import User
from django.db import models
#other imports
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='profile')
books_read = models.IntegerField(default=0)
books_recommended = models.IntegerField(default=0)
class Book(models.Model):
title = models.CharField(...)
author = models.ForeignKey('UserProfile', related_name='books')您将遇到的另一个问题是如何在序列化程序中更新和/或显示这些嵌套关系。
django-restauth文档中的This FAQ article和官方django-rest_framework文档中的this chapter将帮助您快速入门。
最佳,D
https://stackoverflow.com/questions/40312217
复制相似问题