Django API:从请求中获取经过身份验证的用户

时间:2018-11-07 16:21:06

标签: django django-rest-framework

使用allauth对用户进行身份验证。我想创建一个配置文件并将经过身份验证的用户设置为该配置文件的所有者。如何获得用户?

模型类:

from django.db import models
from allauth.utils import get_user_model
from courses.models import Course

class Profile(models.Model):
    owner = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)
    courses = models.ManyToManyField(Course, blank=True)

    def get_courses_items(self):
        return self.courses.all()

    def __str__(self):
        return self.owner.username

观看次数:

from rest_framework.generics import CreateAPIView

from profiles.models import Profile
from .serializers import ProfileSerializer

class ProfileCreateView(CreateAPIView):
    queryset = Profile.objects.all()
    serializer_class = ProfileSerializer

2 个答案:

答案 0 :(得分:0)

您可以使用request.user从请求中获取用户。然后,您可能应该覆盖def create的{​​{1}}方法以使用该用户并创建对象。

答案 1 :(得分:0)

在设置文件(base.py)中设置用户模型并导入

AUTH_USER_MODEL = 'users.User' #(format is module.user model name)


from django.conf import settings


user = models. OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

方法2

重写ProfileView的get_create方法。每个经过身份验证的请求中都有一个request.user对象,它代表发出请求的用户。要获取用户ID,您只需运行request.user.id

class ProfileCreateView(CreateAPIView):
    queryset = Profile.objects.all()
    serializer_class = ProfileSerializer



    def create(self, request, *args, **kwargs):
        user = User.objects.get(id=request.user.id)
        # create the profile and save it
        ...

在序列化程序中,您还可以通过这种方式获取当前用户

from rest_framework.serializers import CurrentUserDefault, PrimaryKeyRelatedField

class ProfileModelSerializer(ModelSerializer):
    user = PrimaryKeyRelatedField(read_only=True, default=CurrentUserDefault())
    class Meta:
    ...

我不知道您的设置的其余部分如何,但是这些方法中的任何一种还是它们的组合