start how framework example create django django-rest-framework

how - django rest framework vs django



django-rest-framework http no funciona con 415 en django 1.5 (1)

Está absolutamente en el camino correcto: la prueba de ruptura en ese caso se debe sin duda al cambio de Django en el comportamiento de PUT para el cliente de prueba.

Tu corrección también me parece bien. 415 es la respuesta "Tipo de medio no admitido", lo que significa que el tipo de contenido de solicitud no era algo que pudiera ser manejado por ninguno de los analizadores configurados para la vista.

Normalmente, en un caso como este, eso se debe a que olvidaste establecer el tipo de contenido de la solicitud, pero parece que lo tienes configurado correctamente en multipart/form-data; boundary=... multipart/form-data; boundary=...

Cosas para verificar:

  • ¿Qué muestra response.data como los detalles del error?
  • ¿Qué has configurado en tu configuración DEFAULT_PARSER_CLASSES , si tienes una, o qué has configurado en el atributo de vista parser_classes si tiene una?
  • Asegúrese de que no haya un error tipográfico en content_type en la prueba (aunque es correcto aquí).

Editar :

Gracias por sus comentarios; eso lo aclara todo. Solo tiene instalado el analizador JSON, pero está intentando enviar datos codificados. Usted debe:

  • Agregue FormParser y MultiPartParser a su configuración / vista, para que admita codificaciones de forma. (Tenga en cuenta también que la configuración predeterminada DEFAULT_PARSER_CLASSES incluye, por lo que si no establece nada, funcionará como se esperaba)

O

  • Codifique la solicitud utilizando la codificación json , no la codificación de la forma ... data=json.dumps(prepare_dict(self.account)), content_type=''application/json'' en su caso de prueba.

Estoy usando django-rest-framework (último) para REST API, e implementado algunos casos de prueba en django usando el cliente de prueba integrado.

El siguiente caso de prueba django funcionaba bien con la versión de django <1.5

self.client.put(''/core/accounts/%s/''% self.account.id, data = prepare_dict(self.account), HTTP_AUTHORIZATION=self.token)

actualizado a django 1.5, todas las pruebas están pasando, excepto las pruebas relacionadas con HTTP PUT mientras se investiga el problema encontrado en este @ https://docs.djangoproject.com/en/dev/releases/1.5/#options-put-and-delete- requests-in-the-test-client

Si estaba utilizando el parámetro de datos en una solicitud PUT sin content_type, debe codificar sus datos antes de pasarlos al cliente de prueba y establecer el argumento content_type.

Por lo tanto, actualicé mi prueba para reflejar este cambio e intenté seguirla, pero aun así obtuve http 415 en lugar de 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)

¿Alguna idea de lo que me estoy perdiendo? PD: toda la funcionalidad funciona bien desde la interfaz de usuario web incorporada django-rest-framework