django-rest-framework http setzen, andernfalls mit 415 auf django 1.5
Bin ich mit django-rest-framework (neueste Version) für REST-API implementiert und einige test-Fällen in django mit built in test client.
folgenden django Testfall war in Ordnung arbeiten mit django-version < 1.5
self.client.put('/core/accounts/%s/'% self.account.id,
data = prepare_dict(self.account),
HTTP_AUTHORIZATION=self.token)
Upgrade auf django 1.5, alle Prüfungen sind vorbei, außer Prüfungen im Zusammenhang zu HTTP PUT
beim Blick auf die Frage gefunden, dieses @ https://docs.djangoproject.com/en/dev/releases/1.5/#options-put-and-delete-requests-in-the-test-client
Wenn Sie wurden mit Hilfe der data-parameter in einer PUT-Anfrage ohne
content_type, müssen Sie die Verschlüsselung Ihrer Daten vor der übergabe an den test
client, und legen Sie die content_type argument.
So, meine aktualisierten test, um diese änderung widerzuspiegeln und versucht folgende, aber noch immer http 415 statt mit http 200
from django.test.client import MULTIPART_CONTENT, BOUNDARY, encode_multipart
self.client.put('/core/accounts/%s/'% self.account.id,
data = encode_multipart(BOUNDARY, prepare_dict(self.account)),
content_type=MULTIPART_CONTENT,
HTTP_AUTHORIZATION=self.token)
Idee was mir fehlt?
P. S: die gesamte Funktionalität ist in Ordnung, die vom django-rest-framework integrierten web-UI
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist absolut auf dem richtigen Weg - dem Bruchtest in diesem Fall liegt sicherlich auch an Django ' s ändern in
PUT
Verhalten für den test-client.Ihr fix sieht Recht auf mich zu. 415 ist der "Unsupported Media Type" - Reaktion, was bedeutet, dass der request content-type war nicht etwas, das benutzt werden konnte, die von jeder der Parser konfiguriert werden, für die Ansicht.
Normalerweise in einem Fall wie diesem, das wäre aufgrund zu vergessen, um die content-type der Anfrage, aber wie es aussieht, hast du das richtig eingestellt
multipart/form-data; boundary=...
Dinge zu überprüfen:
response.data
Anzeige, die den Fehler details?DEFAULT_PARSER_CLASSES
Einstellung, wenn Sie eine haben, oder was Sie haben legen Sie auf der Ansicht-Attributparser_classes
wenn er eines hat?content_type
im test (obwohl es richtig hier).Bearbeiten:
Danke für Eure Kommentare - das klärt alles. Du hast nur den JSON-parser installiert, aber Sie versuchen zu senden Formular kodierte Daten. Sie sollten entweder:
FormParser
undMultiPartParser
Ihren Einstellungen/Ansicht, so dass es unterstützt die form-Kodierungen. (Beachten Sie auch, dass die Standard -DEFAULT_PARSER_CLASSES
Einstellung hat gehören Sie, so, wenn Sie nicht überhaupt nichts, es wird funktionieren wie erwartet)Oder
json
Codierung keine Codierung...data=json.dumps(prepare_dict(self.account)), content_type='application/json'
im test Fall.django.test.TestCase
und nichtrest_framework.test.APITestCase
. Nachdem ich die änderung vorgenommen, das Problem ging Weg.