【问题标题】:Django form PUT and DELETE http methodDjango 表单 PUT 和 DELETE http 方法
【发布时间】:2012-04-29 11:39:30
【问题描述】:

我正在使用 Django Tastypie 来获得一个 Rest API。效果很好。

现在,我想以 django 形式使用我的 Rest API。我知道网络浏览器不能发送PUTDELETE http 方法(仅限GETPOST)。

例如用ExpressJS解决问题(一个NodeJS web框架):

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

我可以使用这个技巧。

这是一种使用 Django Form 做同样事情的方法吗?

【问题讨论】:

    标签: django rest tastypie


    【解决方案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?
    

    将此中间件存储在您网站的 middleware.py 中,然后您需要在 Django 设置中加载此中间件。魔法!

    【讨论】:

      【解决方案2】:

      我认为您可以像这样使用 javascript 发送 Put 或 delete

      $("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");
              }
          });
      });
      

      或者甚至你的这种破解方法也可以工作......你必须在服务器端检查这个值,然后相应地调用他的 rest API。

      【讨论】:

      • 为什么布尔选项使用字符串?!
      猜你喜欢
      • 2012-03-25
      • 1970-01-01
      • 2013-08-26
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 2010-10-28
      相关资源
      最近更新 更多