【问题标题】:Resource has no available deserialization method资源没有可用的反序列化方法
【发布时间】:2013-10-22 15:48:23
【问题描述】:

使用 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)

【问题讨论】:

    标签: python django tastypie


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-04
      • 1970-01-01
      • 2014-05-17
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      相关资源
      最近更新 更多