1
使用Django制作后到我的API的时候,我发现了以下错误:资源已没有可用的反序列化方法
格式表示为“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)