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.