You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Hoppscotch向Django 4.0+发送POST请求时遇CSRF token缺失问题

解决Django 4.0+ 与Hoppscotch POST请求的CSRF验证问题

一、Django端配置调整

首先要解决GET请求无法获取csrftoken cookie的问题,Django默认不会给所有请求自动设置CSRF cookie,尤其是使用DRF的API视图时:

  • 确认CSRF中间件启用:检查settings.py的MIDDLEWARE列表,确保'django.middleware.csrf.CsrfViewMiddleware'存在且未被注释。
  • 强制视图返回CSRF Cookie:如果你的POST请求对应DRF的APIView,需在视图类上添加ensure_csrf_cookie装饰器,让Django在GET请求时返回csrftoken cookie。示例代码:
    from django.views.decorators.csrf import ensure_csrf_cookie
    from django.utils.decorators import method_decorator
    from rest_framework.views import APIView
    
    @method_decorator(ensure_csrf_cookie, name='dispatch')
    class EventView(APIView):
        def get(self, request):
            return Response({"status": "ok"})
        
        def post(self, request):
            # 处理POST请求逻辑
            serializer = EventSerializer(data=request.data)
            if serializer.is_valid():
                serializer.save()
                return Response(serializer.data, status=201)
            return Response(serializer.errors, status=400)
    
  • 跨域配置(若存在跨域):如果Hoppscotch和Django不在同一域名下,需配置CORS。安装django-cors-headers后,在settings.py中添加:
    INSTALLED_APPS = [
        # ...
        'corsheaders',
    ]
    
    MIDDLEWARE = [
        'corsheaders.middleware.CorsMiddleware',
        'django.middleware.common.CommonMiddleware',
        # ... 其他中间件
    ]
    
    # 允许Hoppscotch的本地域名,生产环境按需修改
    CORS_ALLOWED_ORIGINS = [
        "http://localhost:3000",
    ]
    # 允许携带Cookie(关键,否则CSRF cookie无法被Hoppscotch保存)
    CORS_ALLOW_CREDENTIALS = True
    

二、Hoppscotch端操作步骤

Django配置完成后,按以下步骤获取并使用CSRF token:

  1. 获取CSRF Cookie:在Hoppscotch中向你的视图发送GET请求,此时响应头会包含Set-Cookie: csrftoken=xxx,确保Hoppscotch的"Enable Cookies"选项已开启(在设置中可找到),它会自动保存这个cookie。
  2. 添加CSRF请求头:在POST请求的Headers中添加:
    • 键:X-CSRFToken
    • 值:从Hoppscotch的Cookie管理器或浏览器开发者工具(Application->Cookies)中复制csrftoken的值。
  3. 启用Cookie携带:在Hoppscotch的请求设置里,开启"Send Cookies"选项,确保请求时携带保存的csrftoken cookie。

三、额外注意事项

  • 若使用Django普通视图(非DRF),需确保模板中包含{% csrf_token %}标签,这样GET请求会自动设置CSRF cookie;纯API接口仍需用ensure_csrf_cookie装饰器。
  • 确认POST请求的Content-Type为application/json,Django的CSRF验证默认支持该类型,但需保证请求头设置正确。

内容的提问来源于stack exchange,提问作者Ixyz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 01:17:23