Django形成PUT和DELETE http方法

时间:2012-04-29 11:39:30

标签: django rest tastypie

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

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

例如,要解决ExpressJS(A NodeJS网络框架)的问题:

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

我可以使用这个黑客。

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

2 个答案:

答案 0 :(得分:2)

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设置中加载此中间件。魔术!

答案 1 :(得分: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");
        }
    });
});

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