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()