viewsets updateapiview framework filters as_view apiview django rest parameters

updateapiview - Django-¿Dónde se almacenan los parámetros en una solicitud PUT/DELETE?



django rest updateapiview (5)

Me gustaría seguir el patrón RESTful para mi nuevo proyecto django, y me gustaría saber dónde están los parámetros cuando se realiza una solicitud PUT / DELETE.

Por lo que sé, solo veo GET & POST QueryDict en la solicitud, no otros. ¿Django agrega un nuevo PUT o DELETE QueryDict con respecto a la solicitud, o agrega los parámetros a GET o POST QueryDict?

Gracias por tu ayuda.


Estoy usando django v1.5. Y utilizo principalmente QueryDict para resolver el problema:

from django.http import QueryDict put = QueryDict(request.body) description = put.get(''description'')

y en * .coffee

$.ajax url: "/policy/#{policyId}/description/" type: "PUT" data: description: value success: (data) -> alert data.body fail: (data) -> alert "fail"

Puede ir here para encontrar más información. Y espero que esto te pueda ayudar. Buena suerte:)


Hubo un problema que no pude resolver cómo analizar multipart / form-data de la request . QueryDict(request.body) no me ayudó.

Entonces, he encontrado una solución para mí. Empecé a usar esto:

from django.http.multipartparser import MultiPartParser

Puede obtener datos de request como:

MultiPartParser(request.META, request, request.upload_handlers).parse()


La respuesta de Ninefiger es correcta. Sin embargo, hay soluciones para eso.

Si está escribiendo una API de estilo REST para un proyecto de Django, le sugiero que use tastypie . Se ahorrará toneladas de tiempo y le garantizará un formulario más estructurado a su API. También puede ver cómo lo hace el tastypie (acceder a los datos PUT y DELETE).


Puede ver un ejemplo de cómo obtener un QueryDict para un método PUT en el código de django-piston (consulte el método coerce_put_post)


Supongo que lo que estás preguntando es si puedes tener un método como este:

def restaction(request, id): if request.method == "PUT": someparam = request.PUT["somekey"]

La respuesta es no, no puedes. Django no construye dichos diccionarios para solicitudes PUT, OPTIONS y DELETE, explicando el razonamiento here .

Para resumirlo, el concepto de REST es que los datos que intercambia pueden ser mucho más complicados que un simple mapa de claves de valores. Por ejemplo, PONER una imagen, o usar json. Un marco no puede conocer las muchas formas en que podría desear enviar datos, por lo que hace lo obvio: dejarte manejar ese bit. Ver también la respuesta a esta pregunta donde se da la misma respuesta.

Ahora, ¿dónde encuentras los datos? Bueno, según los docs , django 1.2 presenta request.raw_post_data . Como advertencia, parece que django 1.3 admitirá request.read() es decir, semántica similar a un archivo.