1

我是 Django 开发的新手。我有一个资源和模型:

模型

class Player(models.Model):
    pseudo = models.CharField(max_length=32, unique=True)

模型资源

class PlayerResource(ModelResource):
    class Meta:
        queryset = Player.objects.all()
        resource_name = 'player'
        authentication = BasicAuthentication()
        authorization = Authorization()
        serializer = Serializer(formats=['xml'])
        filtering = {
            'pseudo': ALL,
        }

我用 /api/v1/player/?format=xml 请求所有播放器,但似乎缺少响应标头: Content-Length 导致我的应用程序出现一些问题。如何将其添加到响应标头中?

非常感谢。

4

2 回答 2

3

缺少 Content-Length 是由于缺少中间件。
更多信息:看这里:如何获取 Django 响应对象的内容长度?

但是您可以像这样手动添加 Content-Length :

def create_response(self, request, data, response_class=HttpResponse, **response_kwargs):
        desired_format = self.determine_format(request)
        serialized = self.serialize(request, data, desired_format)
        response = response_class(content=serialized, content_type=build_content_type(desired_format), **response_kwargs)
        response['Content-Length'] = len(response.content)
        return response
于 2013-04-23T09:47:45.753 回答
2

您可以通过覆盖您自己的资源中的 create_reponse 方法来添加 Content-Length 标头,例如:

class MyResource(ModelResource):
   class Meta:
        queryset=MyModel.objects.all()

   def create_response(self, ...)
      # Here goes regular code that do the method from tastypie
      return response_class(content=serialized, content_type=build_content_type(desired_format), Content-Length=value,  **response_kwargs)
于 2013-04-20T23:59:28.767 回答