2013-04-18 1 views
1

Я совершенно новый в разработке Django. У меня есть ресурс и модель:Django Tastypie add Content-Length header

Модель

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

ModelResource

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/проигрыватель/формат = xml, но кажется, что заголовок ответа: Content-Length отсутствует, что вызывает некоторые проблемы в моем приложении. Как добавить его в заголовок ответа?

Большое спасибо.

ответ

3

Отсутствия Content-Length был связан с отсутствием Middleware.
Для получения дополнительной информации: Посмотрите здесь: How do I get the content length of a Django response object?

Но вы можете вручную добавить 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 
2

Вы можете добавить заголовок Content-Length путем переопределения метода create_reponse в собственном ресурсе для экс:

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)