66 votes

Django - Où les paramètres sont-ils stockés dans une requête PUT / DELETE?

J'aimerais suivre le modèle RESTful pour mon nouveau projet django et savoir où sont les paramètres lorsqu'une demande PUT / DELETE est effectuée.

Autant que je sache, je ne vois que GET & POST QueryDict dans la requête, pas d'autres. Django ajoute-t-il un nouveau PUT ou DELETE QueryDict à la demande ou ajoute-t-il les paramètres à GET ou POST QueryDict?

Merci de votre aide.

103voto

Ni Xiaoni Points 301

J'utilise Django v1.5. Et j'utilise principalement QueryDict pour résoudre le problème:

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

et dans * .coffee

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

Vous pouvez aller ici pour trouver plus d'informations. Et j'espère que cela peut vous aider. Bonne chance:)

47voto

Ninefingers Points 18767

Je suppose que vous vous demandez si vous pouvez avoir une méthode comme ceci:

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

La réponse est non, vous ne pouvez pas. Django ne pas construire de tels dictionnaires pour les METTRE, aux OPTIONS et aux requêtes de SUPPRESSION, le raisonnement étant expliqué ici.

Pour résumer, pour vous, la notion de REPOS, c'est que les données que vous échangez peut être beaucoup plus compliqué qu'une simple carte de clés à des valeurs. Par exemple, en Mettant une image, ou de l'utilisation de json. Un cadre ne peut pas savoir le nombre de façons que vous pourriez envoyer des données, de sorte qu'il ne la chose la plus évidente - vous permet de gérer un peu. Voir également la réponse à cette question où la réponse est donnée.

Maintenant, où trouvez-vous les données? Eh bien, d'après les docs, django 1.2 caractéristiques request.raw_post_data. Comme un heads-up, il ressemble à django 1.3 soutiendra request.read() c'est à dire de fichiers comme sémantique.

14voto

Arthur Debert Points 3632

La réponse de Ninefiger est correcte. Il existe cependant des solutions de contournement pour cela.

Si vous écrivez une API de style REST pour un projet django, je vous suggère fortement d’utiliser tastypie . Vous gagnerez du temps et vous garantirez un formulaire plus structuré pour votre API. Vous pouvez également regarder comment le savoie le fait (accéder aux données PUT et DELETE).

5voto

Tom Christie Points 8729

Vous pouvez voir un exemple d'obtention d'un QueryDict pour une méthode PUT dans le code de django-piston (voir la méthode coerce_put_post)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X