Django – Dove sono memorizzati i parametri su una richiesta PUT / DELETE?

Mi piacerebbe seguire lo schema RESTful per il mio nuovo progetto django, e mi piacerebbe sapere dove sono i parametri quando viene fatta una richiesta PUT / DELETE.

Per quanto ne so, vedo solo GET e POST QueryDict nella richiesta, nessun altro. Django aggiunge un nuovo PUT o DELETE QueryDict riguardo alla richiesta, o aggiunge i parametri a GET o POST QueryDict?

Grazie per l’aiuto.

Sto usando django v1.5. E utilizzo principalmente QueryDict per risolvere il problema:

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

e in * .coffee

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

Puoi andare qui per trovare maggiori informazioni. E spero che questo possa aiutarti. In bocca al lupo:)

Presumo che quello che stai chiedendo è se puoi avere un metodo come questo:

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

La risposta è no, non puoi. Django non costruisce tali dizionari per le richieste PUT, OPTIONS e DELETE, il ragionamento qui spiegato.

Per riassumerlo per te, il concetto di REST è che i dati scambiati possono essere molto più complicati di una semplice mappa di chiavi per valori. Ad esempio, PUTting un’immagine, o usando JSON. Un framework non può conoscere i molti modi in cui potresti voler inviare i dati, quindi fa la cosa ovvia: ti occupiamo di quel po ‘. Vedi anche la risposta a questa domanda dove viene data la stessa risposta.

Ora, dove trovi i dati? Bene, secondo i documenti , le caratteristiche di django 1.2 request.raw_post_data . A prima vista, sembra che django 1.3 supporti la semantica request.read() .

La risposta di Ninefiger è corretta. Ci sono, tuttavia, soluzioni alternative per questo.

Se stai scrivendo un’API in stile REST per un progetto Django, ti suggerisco caldamente di usare tastypie . Ti risparmierai un sacco di tempo e garantirai una forma più strutturata alla tua API. Puoi anche vedere come tasteypie lo fa (accedere ai dati PUT e DELETE).

Puoi vedere un esempio di come ottenere un QueryDict per un metodo PUT nel codice di django-piston (vedi il metodo coerce_put_post)

C’è stato un problema che non ho potuto risolvere come analizzare dati multipart / form dalla request . QueryDict(request.body) non mi ha aiutato.

Quindi, ho trovato una soluzione per me. Ho iniziato a usare questo:

from django.http.multipartparser import MultiPartParser

Puoi ottenere dati da una request come:

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