2010-03-07 16 views
7

Puedo usar este verbo en el SDK de Windows de Python. Pero no en producción. ¿Por qué? ¿Qué estoy haciendo mal?Cómo usar el método HTTP DELETE en Google App Engine?

El mensaje de error incluye (sólo se ve a través de Firebug o violinista)

solicitud mal formada

o algo por el estilo

Mi código es el siguiente:

from google.appengine.ext import db 
from google.appengine.ext import webapp 

class Handler(webapp.RequestHandler): 
    def delete(self): 
     key = self.request.get('key') 
     item = db.get(key) 
     item.delete() 
     self.response.out.write(key) 
+0

Usted dice que está viendo esto en producción, ¿sí? ¿Qué dicen los registros de solicitud en la consola de administración de producción? Hay un par de posibles condiciones excepcionales que su código no está manejando, y si el código falla, verá cierta información al respecto. Además, sería muy útil ver la solicitud real que se envía a App Engine. –

+0

@Adam No he visto nada en la consola de administración, solo errores más antiguos. –

+0

Parecería, entonces, que la solicitud ni siquiera llega al manejador de solicitudes, por lo que no es donde está el problema. ¿Puedes publicar la solicitud real en el cuerpo de tu pregunta? –

Respuesta

3

Su controlador se ve bien, ¿está seguro de que está enviando el reques? t correctamente? Usando jQuery, esto funciona para mí (ambos usando dev_appserver y producción de motores aplicación de Google):

$('#delete-button').click(function() { 
    $.ajax({ 
     'type': 'DELETE', 
     'url': '/some/url/that/handles/delete' 
    }) 
}); 

class DeleteHandler(webapp.RequestHandler): 

    def delete(self): 
     if users.get_current_user() == allowed_user: 
      the_data_model.delete() 
     else: 
      self.response.out.write('Permission denied') 

El envío de un cuerpo de la respuesta/mensaje no funciona para mí (por ejemplo, el "permiso denegado" mensaje en mi ejemplo no lo hará llegar al cliente). ¿Has verificado que tus artículos no se eliminan?

+0

tal vez lo han corregido –

+1

@JaderDias - No, esto funciona porque no hay un cuerpo de solicitud enviado en este ejemplo de solicitud DELETE. – jmort253

+0

Esto funciona. Pero envía un cuerpo que la solicitud ni siquiera llega al servidor. – fiatjaf