javascript - 使用 Django 1.10 + AJAX 的安全性,无需任何 HTML 表单

标签 javascript ajax django security

我通过 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/

相关文章:

javascript - 将 tsconfig.json 属性添加到 Gulp 任务

javascript - 无法识别 Mozilla Firefox 中的右键单击事件

php - 如何使用jquery访问php变量

html - <select> 在 IE 中的宽度与在其他浏览器中的行为不同

javascript - 页面加载完成后如何调用函数? (只有那时..)

django - 在单独的服务器上提供静态文件

django - 如何在 HTTPS 服务器上为 Django API 启用 HTTP 访问

django - 如何在 django init_data 上创建默认用户?

javascript - Bootstrap Navbar-滚动后品牌变化

javascript - 在 Javascript 中导入模块未明确导出的内容