1

使用 Django 向我的 API 发送 POST 时出现以下错误:

指示“文本/纯文本”的格式没有可用的反序列化方法。请检查您的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)
4

1 回答 1

2

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

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

于 2013-10-22T21:48:30.810 回答