【发布时间】:2018-01-05 08:39:21
【问题描述】:
在过去一周左右的时间里,我一直在努力成功实现一个 jQuery ajax 请求,以将数据从我的 Annualgoals.html 中的 javascript 函数传递到 django 视图,以便将数据保存到我的数据库中。目前我只是试图通过在 django 端打印数据来测试数据传输。
我已经检查了以下线程,但看不到任何显示与我看到的相同错误的线程(我几乎可以肯定缺少一些明显的东西)。
Forbidden (CSRF token missing or incorrect) Django error
"CSRF token missing or incorrect" while post parameter via AJAX in Django
虽然缺少 CSRF 令牌是我的第一个问题,但 StackOverflow 和 django 文档上的答案很好地解释了必须做什么才能确保包含 csrf 令牌。但是,按照推荐的步骤,我收到以下 django 错误:
response.set_cookie(settings.CSRF_COOKIE_NAME, AttributeError: 'NoneType' 对象没有属性 'set_cookie'
我的代码如下:
年度目标.html
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
var data = [1, 2, 3, 4]
var csrftoken = getCookie('csrftoken');
// Ajax Setup
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
// Ajax Call
$.ajax({
type: 'POST',
url: "{% url 'LifeAdmin:saveAnnualGoals' %}",
data: {'data[]': data},
});
views.py
@ensure_csrf_cookie
@login_required
def saveAnnualGoals(request):
if request.method == 'POST':
data = request.POST.get('data')
print(data)
urls.py
url(r'^saveAnnualGoals$', views.saveAnnualGoals, name='saveAnnualGoals')
我正在使用 Django 1.10.5 和 Python 3.6.1
任何帮助将不胜感激!
谢谢:)
【问题讨论】:
-
尝试使用
@ensure_csrf_cookie装饰器来呈现页面,用户将从该页面发出ajax 请求。
标签: jquery python ajax django django-views