首页 > 解决方案 > AJAX POST 数据似乎没有命中 Django Rest Framework API Endpoint

问题描述

我正在尝试使用 AJAX 和 DRF 构建一个用户可以关注另一个用户的功能。但是,当我启动它时,发布的数据似乎没有到达 DRF 端点,所以我没有收到任何错误:

{user: ["This field is required."], following_user: ["This field is required."]}
following_user: ["This field is required."]
user: ["This field is required."]

这是我的js函数:

const followUser = function(followedUser){
    var pathArray = window.location.pathname.split('/');
    var currentUser = pathArray[1];
    console.log("Following" + " " + followedUser);
    $.ajax({
        type: 'POST',
        url: '/api/userconnections/',
        data: {
            csrfmiddlewaretoken: document.querySelector('input[name="csrfmiddlewaretoken"]').value,
            'current_user': currentUser,
            'followed_user': followedUser
        },
        success: function(data) {
            alert('Successfully Followed')
        }
    });
}

这是我的序列化程序:

class UserConnectionListSerializer(serializers.ModelSerializer):
    user = serializers.StringRelatedField()
    following_user = serializers.StringRelatedField()

    class Meta:
        model = UserConnections
        fields = ['user','following_user']

class UserConnectionSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserConnections
        fields = '__all__'

这是视图功能:

class UserConnectionsViewSet(viewsets.ModelViewSet):
    serializer_class = serializers.UserConnectionListSerializer
    queryset = UserConnections.objects.all()

    def get_serializer_class(self):
        """IF this is a form post, use the basic serializer that
        deals with id (primary key) otherwise give the more sophisticated 
        version that deals with actual username"""
        if self.request.method == 'POST':
            return serializers.UserConnectionSerializer

        return self.serializer_class

        def follow_user(request):
            if request.method == "POST":
                data = {'user': request.DATA.get('current_user'), 'following_user': request.DATA.get('followed_user')}

                serializer = UserConnectionListSerializer(data=data)
                if serializer.is_valid():
                    serializer.save()
                    return Response(serializer.data, status=status.HTTP_201_CREATED)
                    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

标签: djangoajaxdjango-rest-framework

解决方案


推荐阅读