资源没有可用的反序列化方法

时间:2013-10-22 15:48:23

标签: python django tastypie

使用Django在对我的API进行POST时出现以下错误:

表示'text / plain'的格式没有可用的反序列化方法。请检查您的序列化工具上的formatscontent_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)

1 个答案:

答案 0 :(得分:2)

contentType: 'application/json; charset=UTF-8'添加到$.ajax()来电,以指明请求数据的内容类型。

dataType参数指定响应的格式,而不是请求