/ / Django Tastypie füge Content-Length-Header hinzu - Python, Django, Rest, httpresponse, tastypie

Django Tastypie füge Content-Length-Header hinzu - Python, Django, Rest, httpresponse, tastypie

Ich bin ziemlich neu in der Django-Entwicklung. Ich habe eine Ressource und ein Modell:

Modell

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,
}

Und ich bitte alle Spieler mit/ api / v1 / player /? format = xml aber es scheint, dass der Antwortheader: Content-Length fehlt, was einige Probleme in meiner App verursacht. Wie kann ich es in den Antwortheader einfügen?

Danke vielmals.

Antworten:

3 für die Antwort № 1

Der Mangel an Content-Length war auf das Fehlen einer Middleware zurückzuführen.
Für mehr Informationen : Schau hier : Wie erhalte ich die Inhaltslänge eines Django-Antwortobjekts?

Sie können die Content-Length aber auch wie folgt manuell hinzufügen:

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 für die Antwort № 2

Sie können Content-Length-Header hinzufügen, indem Sie die create_reponse-Methode in Ihrer eigenen Ressource überschreiben, z.

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)