i通过没有HTML表单的AJAX提出发布请求。有安全问题吗?为什么没有CSRF错误?因为我不发送任何CSRF数据,并且在Django中启用了CSRF?
toggle-status.js
jQuery(document).ready(function($) {
$("#switch-status").click(function(){
$.ajax({
url: '/account/switches/',
data: {'toggle': 'status'}
});
});
});
view.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('')
ajax
函数的默认方法是GET
一个,而不是POST
。所以,做一个:
$.ajax({
url: '/account/switches/',
data: {'toggle': 'status'}
});
意味着制作了AJAX GET
。因此,您没有执行POST
请求。
如果您想要POST
请求,请这样做:
$.ajax({
method: 'POST',
url: '/account/switches/',
data: {'toggle': 'status'}
});
当然,您必须包括CSRF令牌,因为如果您尝试使用POST
而不包括一个,则会失败。在这里查看如何解决这个问题。