问题描述
我知道这是一个陈旧的问题,我在网上和这个网站上搜索了无数答案,这些答案归结为完全相同的解决方案,但没有一个对我有用,我不知道为什么。到目前为止我的信息/试验:
- 令人惊讶的是
csrf_exempt
装饰器不起作用 - 尝试在所有
Ajax
调用之前设置 Headers/beforeSend 一次,但不起作用(我尝试在调用中设置标头,并为所有ajax
调用设置一次) - 我可以通过
django
或 djangojavascript
轻松获取{{ token }}
令牌 -
django.middleware.csrf.CsrfViewMiddleware
出现在settings.py
python 3.8; django 2.2
- [更新] 我也尝试删除
contentType
也无济于事
在下面您可以看到 /*...*/
var csrftoken = '{{ csrf_token }}'
$.ajaxSetup({
crossDomain: false,beforeSend: function(xhr,settings) {
xhr.setRequestHeader("X-CSRFToken",csrftoken)
}
});
$.ajax({
url: '/do_things/',type: 'POST',contentType: 'application/json',data: {
/*'csrfmiddlewaretoken': csrftoken*/
},beforeSend: function (xhr) {
/*xhr.setRequestHeader('X-Requested-With','XMLHttpRequest');*/
/*xhr.setRequestHeader('X-CSRFToken',csrftoken);*/
/*xhr.setRequestHeader('X-CSRF-Token',csrftoken);*/
},headers: {
/*'X-CSRFToken': csrftoken,*/
/*'X-CSRF-Token': csrftoken*/
},success: function (data) {
console.log('Fill all the tables')
}
})
在视图侧
@login_required(login_url='/login/')
def do_things(request):
if request.method == "POST":
...
在 url
方面(以防我在这里搞砸了):
urlpatterns = [
#...
path('r/',views.do_things,name='do_things'),]
资源:
a) Forbidden (CSRF token missing or incorrect.) | Django and AJAX
b) Adding CSRFToken to Ajax request
c) https://docs.djangoproject.com/en/2.2/ref/csrf/
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)