django报错 Forbidden (CSRF cookie not set.)

django报错

Forbidden (CSRF cookie not set.): /predict_department/ [22/Feb/2024 15:01:12] “POST /predict_department/ HTTP/1.1” 403 2869

这个错误是由于 Django 的 CSRF(Cross-Site Request Forgery)保护机制导致的。
CSRF 是一种攻击方式,通过伪装用户的请求来执行未经授权的操作。
为了防止这种攻击,Django 默认情况下会要求在进行 POST 请求时携带 CSRF 令牌。

方法一:

  1. 在你创建的项目中,找到settings.py文件
  2. 文件settings.py 找到 MIDDLEWARE参数
  3. 注释掉’django.middleware.csrf.CsrfViewMiddleware’
    在这里插入图片描述

方法二:

包含 CSRF 令牌: 在发送 POST 请求时,在请求头中包含 CSRF 令牌。您可以通过以下方式获取 CSRF 令牌并包含在请求中:

fetch('http://127.0.0.1:8000/api/predict_department/', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'X-CSRFToken': getCookie('csrftoken')  // 获取 CSRF 令牌的函数
    },
    body: JSON.stringify({
        'patient_complaint': 'complaint',
        'age': 30,
        'gender': 'male'
    })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));

请注意,上述代码中的 getCookie(‘csrftoken’) 函数应该用于从 Cookie 中获取 CSRF 令牌。

方法三:

禁用 CSRF 保护: 如果您确定您的应用不容易受到 CSRF 攻击,并且决定禁用 CSRF 保护,您可以在 Django 视图函数中添加 @csrf_exempt 装饰器来禁用 CSRF 保护:

# prediction/views.py

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
@api_view(['POST'])
def predict_department(request):
    # 视图函数代码

请注意,禁用 CSRF 保护可能会增加您的应用受到 CSRF 攻击的风险,因此建议仅在明确了解风险并采取其他安全措施的情况下使用。

参考文章: https://gitee.com/all-about-git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值