使用Django在对我的API进行POST时出现以下错误:
表示'text / plain'的格式没有可用的反序列化方法。请检查您的序列化工具上的formats
和content_types
。
我已尝试将enctype="application/x-www-form-urlencoded
添加到表单中,但错误是相同的。我想也许这是一个API序列化器问题?
有什么想法吗?
这是AJAX:
$.ajax({
url: '/api/v1/rewards/campaigns/',
type: 'POST',
dataType: "json",
beforeSend: function (request) {
request.setRequestHeader("X-CSRFToken", $('input[name="csrfmiddlewaretoken"]').val());
},
data: $('#registration').serialize(),
success: function(data, textStatus) {
console.log('success');
},
error: function(errorThrown){
// data = JSON.parse(errorThrown.responseText);
console.log(errorThrown);
}
});
这是它发布的资源:
class urlencodeSerializer(Serializer):
formats = ['json', 'jsonp', 'xml', 'yaml', 'html', 'plist', 'urlencode']
content_types = {
'json': 'application/json',
'jsonp': 'text/javascript',
'xml': 'application/xml',
'yaml': 'text/yaml',
'html': 'text/html',
'plist': 'application/x-plist',
'urlencode': 'application/x-www-form-urlencoded',
}
def from_urlencode(self, data, options=None):
""" handles basic formencoded url posts """
qs = dict((k, v if len(v) > 1 else v[0] )
for k, v in urlparse.parse_qs(data).iteritems())
return qs
def to_urlencode(self, content):
pass
class CampaignCreateResource(ModelResource):
class Meta:
queryset = Campaign.objects.all()
resource_name = 'rewards/campaigns'
allowed_methods = ['post', 'get']
serializer = urlencodeSerializer()
validation = FormValidation(form_class=CampaignForm)
答案 0 :(得分:2)
将contentType: 'application/json; charset=UTF-8'
添加到$.ajax()
来电,以指明请求数据的内容类型。
dataType
参数指定响应的格式,而不是请求!