我正在使用Django Tastypie以获得Rest API。效果很好。
现在,我想以django形式使用我的Rest API。我知道网络浏览器无法发送PUT
或DELETE
http方法(仅限GET
和POST
)。
例如,要解决ExpressJS
(A NodeJS
网络框架)的问题:
<input type="hidden" name="_method" value="delete"/>
我可以使用这个黑客。
使用Django Form是否可以做同样的事情?
答案 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。