使用Django 1.10 Ajax的安全性,没有任何HTML表单



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而不包括一个,则会失败。在这里查看如何解决这个问题。

最新更新