我通过 AJAX 发出 POST 请求,无需 HTML 表单。 是否存在安全问题? 为什么没有csrf错误?因为我没有发送任何csrf数据并且django中启用了csrf?
切换状态.js
jQuery(document).ready(function($) {
$("#switch-status").click(function(){
$.ajax({
url: '/account/switches/',
data: {'toggle': 'status'}
});
});
});
查看.py
@login_required
def switches(request):
toggle = request.GET.get('toggle', None)
current_user = request.user
update = Switches.objects.get(owner=current_user)
if toggle == 'status':
if update.status is True:
update.status = False
else:
update.status = True
update.save()
return HttpResponse('')
最佳答案
default method ajax
函数是 GET
函数,而不是 POST
。所以,做一个:
$.ajax({
url: '/account/switches/',
data: {'toggle': 'status'}
});
意味着创建了一个ajax GET
。因此,您没有执行 POST
请求。
如果您想要一个 POST
请求,请按如下方式操作:
$.ajax({
method: 'POST',
url: '/account/switches/',
data: {'toggle': 'status'}
});
当然,您必须包含 CSRF token ,因为如果您尝试在不包含 CSRF token 的情况下尝试 POST
,将会失败。看here如何实现这一点。
关于javascript - 使用 Django 1.10 + AJAX 的安全性,无需任何 HTML 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43602518/