无法使用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')
默认情况下使用ModelSerializer
类jsonData
字段默认为使用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