无法使用AJAX进行POST请求,但可以通过可浏览的API在使用Django Rest Framework时执行此操作

第一次使用Django时,我使用DRF构建了一个简单的API,并且我使用的视图是框架提供的通用视图。我的模型中有一个JSONField,我在序列化程序类中使用了DictField。使用可浏览的API时,所有不同的HTTP请求都可以工作。我甚至可以使用JQuery对所有项目或单个项目发出GET请求,但是我无法使用与使用可浏览API进行相同请求时提供的相同数据发出发布请求。无法使用AJAX进行POST请求,但可以通过可浏览的API在使用Django Rest Framework时执行此操作

我的序列化器类如下:

class ChartsSerializer(serializers.ModelSerializer): 

jsonData = serializers.DictField()

owner = serializers.ReadOnlyField(source='owner.username')

class Meta:

model = Charts

fields = ('id', 'chartName', 'description', 'isPrivate', 'jsonData', 'owner')

默认情况下使用ModelSerializerjsonData字段默认为使用CharField作为SerializerField时。

在可浏览的API中提供的默认模板提供了一个空的列表,我用一个对象替换它。

并使用HTML表单标签,使POST请求时,我得到了同样的错误。

我更新了perform_create方法,以确保在调用save方法时传递给序列化程序的数据是字典。

class ChartsList(generics.ListCreateAPIView): 

queryset = Charts.objects.all()

serializer_class = ChartsSerializer

permission_classes = (permissions.IsAuthenticatedOrReadOnly,)

def perform_create(self, serializer):

print(self.request.data)

serializer.save(owner=self.request.user, \

jsonData=self.request.data.get('josnData'))

如果有任何错误或需要更多信息,我会提供。

回答:

错误发生在ajax()方法调用中,contentType属性未被正确设置。当使用框架提供的通用视图时,DRF自动选择适当的解析器。它通过查看正在设置的content-type标题来完成此操作,这是通过设置contentType属性完成的。

以上是 无法使用AJAX进行POST请求,但可以通过可浏览的API在使用Django Rest Framework时执行此操作 的全部内容, 来源链接: utcz.com/qa/261726.html

回到顶部