Csrftoken未定义通常是由于缺少CSRF令牌导致的。在Django中,CSRF令牌用于防止跨站点攻击。要解决此问题,请确保在您的HTML表单中包含以下代码:
{% csrf_token %}
在您的视图函数中,请确保您已导入以下模块:
from django.views.decorators.csrf import ensure_csrf_cookie
并在您的视图函数上使用装饰器:
@ensure_csrf_cookie
如果您正在使用Ajax,需要在请求标头中发送CSRF令牌。请确保您的Ajax代码中包含以下内容:
$(document).ready(function() {
var csrftoken = getCookie('csrftoken');
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]);
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
});
});
请确保在您的HTML模板中包含以下JS文件:
<script src="{% static 'js/jquery-3.3.1.min.js' %}"></script>
如果您的项目中有其他版本的jQuery,请根据您的实际需要更改文件路径。