Django表单PUT和DELETE HTTP方法

4
我正在使用Django Tastypie来创建一个Rest API,它运行良好。现在,我想在Django表单中使用我的Rest API。我知道Web浏览器不能发送PUT或DELETE http方法(只有GET和POST)。例如,为了解决ExpressJS(一个NodeJS Web框架)的问题:
<input type="hidden" name="_method" value="delete"/>

我可以使用这个技巧。
使用Django表单有没有实现相同操作的方法?
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设置中加载此中间件。神奇!

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

甚至你的这种黑客方法也可以运行……你需要在服务器端检查这个值,然后相应地调用REST API。


为什么你要使用字符串来表示布尔选项?! - ThiefMaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接