我尝试发布参数像
jQuery.ajax( { 'type': 'POST', 'url': url, 'contentType': 'application/json', 'data': "{content:'xxx'}", 'dataType': 'json', 'success': rateReviewResult } );
但是,Forbidden 403. CSRF verification failed. Request aborted. 我正在使用Django返回'django.middleware.csrf.CsrfViewMiddleware',找不到在不影响安全性的情况下如何防止此问题。
Forbidden 403. CSRF verification failed. Request aborted.
'django.middleware.csrf.CsrfViewMiddleware'
你可以通过两种不同的方式发出AJAX发布请求:
告诉你的视图不要检查csrf令牌。这可以通过使用decorator来完成@csrf_exempt,如下所示:
@csrf_exempt
from django.views.decorators.csrf import csrf_exempt @csrf_exempt def your_view_name(request): ...
要将csrf令牌嵌入每个AJAX请求中,对于jQuery,它可能是:
$(function () { $.ajaxSetup({ headers: { "X-CSRFToken": getCookie("csrftoken") } }); });
该getCookie函数从cookie检索csrf令牌的位置。我使用以下实现:
function getCookie(c_name) { if (document.cookie.length > 0) { c_start = document.cookie.indexOf(c_name + "="); if (c_start != -1) { c_start = c_start + c_name.length + 1; c_end = document.cookie.indexOf(";", c_start); if (c_end == -1) c_end = document.cookie.length; return unescape(document.cookie.substring(c_start,c_end)); } } return ""; }
另外,jQuery 有一个用于访问cookie 的插件,类似这样:
// set cookie $.cookie('cookiename', 'cookievalue'); // read cookie var myCookie = $.cookie('cookiename'); // delete cookie $.cookie('cookiename', null);