2012-04-29 1 views
2

Я использую Django Tastypie, чтобы иметь Rest API. Это работает хорошо.Django form PUT и DELETE http method

Теперь я хотел бы использовать мой Rest API в форме django. Я знаю, что веб-браузеры не могут отправить код PUT или DELETE http (только GET и POST).

Например, чтобы решить проблему с ExpressJS (NodeJS фреймворком A):

<input type="hidden" name="_method" value="delete"/> 

я могу использовать этот хак.

Это способ сделать то же самое, используя форму Django?

ответ

0

Я думаю, вы можете отправить Помещенный или удалить с помощью JavaScript, как этот

$("your_form_id").submit(function(e){ 
    $.ajax({ 
     url: 'your url', 
     type: "PUT", 
     data: $("your_form_id").serialize(), 
     cache: false, 
     dataType: "text", 
     success: function(data){ 
      do_something() 
     }, 
     error: function() { 
      console.log("ERROR"); 
     } 
    }); 
}); 

Или даже этот метод халтуры вашей будет работать .... вы должны проверить это значение на стороне сервера, а затем вызвать он соответственно поддерживает API.

+0

Почему вы используете строки для булевых опций ?! – ThiefMaster

1

TastyPie поддерживает это внутренне с использованием заголовка X-Http-Method-Override, но это не похоже на то, что заголовки более доступны, чем переопределяет этот метод. В случае, если вы можете это сделать, см. here.

Лучше всего, вероятно, использовать промежуточное программное обеспечение Django, как это:

METHODS = [ 'GET', 'PUT', 'POST', 'DELETE' ] 

class DjangoMethodMiddleware(object): 
    def process_request(self, request): 
     meth = request.REQUEST.get('_method', None) 
     if meth is None: 
      return 
     if meth in METHODS: 
      request.method = meth 
     else: 
      pass # TODO: logging? 

Stash это в middleware.py на вашем сайте, то вам тогда нужно загрузить это промежуточное программное обеспечение в настройках Django. Магия!