如何在Django-Rest-Framework中验证用户URL是否与令牌中的用户匹配

时间:2018-09-01 01:36:44

标签: django-rest-framework

我试图在DRF中创建一个对象(称为Post),其中一个字段为user,该字段应代表创建该对象的用户。我正在使用令牌认证,并且我想确保request.user与传递给该对象的用户匹配。但是,我使用的是HyperLinkedModelSerializers,所以我将用户的URL传递给PostSerializer。

如何获取request.user的网址?我必须在用户中创建一个url字段吗?

这是序列化程序类:

class UserSerializer(serializers.HyperlinkedModelSerializer):
    User = get_user_model()
    password = serializers.CharField(write_only=True)

    class Meta:
        model = User
        fields = ('username', 'password')

    def create(self, validated_data):
        user = User.objects.create_user(**validated_data)
        return user


class PostSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Post
        fields = ('id', 'user', 'caption', 'video_link')

    def create(self, validated_data):
        return Post(**validated_data)

这是视图集

class PostViewSet(viewsets.ModelViewSet):
    serializer_class = PostSerializer
    queryset = Post.objects.all()
    permission_classes = (IsAuthenticated, IsOwnerOrReadOnly)

1 个答案:

答案 0 :(得分:1)

如果用户登录系统,则可以按照以下方式重写PostSerializer:

class PostSerializer(serializers.ModelSerializer):

    class Meta:
        model = Post
        fields = ('caption', 'video_link')

    def create(self, validated_data):

        post = Post(user=self.request.user, caption=validated_data['caption'], video_link=validated_data['video_link'])
        post.save()
        return validated_data