4

我正在使用 Django Tastypie 来获得一个 Rest API。它运作良好。

现在,我想以 django 形式使用我的 Rest API。我知道网络浏览器不能发送 aPUTDELETEhttp 方法(只有GETand POST)。

例如,用ExpressJS(A NodeJSweb framework) 解决问题:

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

我可以使用这个技巧。

是否可以使用 Django Form 做同样的事情?

4

2 回答 2

2

TastyPie 使用 X-Http-Method-Override 标头在内部支持此功能,但听起来该方法覆盖的标头不再可访问。如果您可以做到这一点,请参阅此处

您最好的选择可能是使用这样的 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 设置中加载此中间件。魔法!

于 2012-10-04T00:17:31.003 回答
1

我认为您可以像这样使用 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");
        }
    });
});

甚至您的这种 hack 方法也可以工作....您必须在服务器端检查此值,然后相应地调用他的 rest API。

于 2012-04-30T00:14:06.463 回答