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

不使用Django REST Framework时Flutter HTTP POST对接Django的CSRF报错如何解决

问题解决方案

报错原因

Django默认开启CSRF(跨站请求伪造)防护校验,所有POST类请求默认需要携带合法的CSRF token才能通过校验,Flutter端发起的POST请求未携带对应token,因此触发403报错。

可用解决方法

方法1:给指定视图添加CSRF豁免(最推荐,不影响全站其他功能的安全防护)

导入csrf_exempt装饰器,加在对应视图函数上即可豁免该接口的CSRF校验,修改后的代码如下:

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def index1(request):
    # 注意:原代码直接传入request.POST作为查询参数属于错误写法,需要先提取对应字段
    user_id = request.POST.get('id')
    cursor.execute('select * from users where id = %s', [user_id])
    response = list(cursor.fetchall())
    return JsonResponse(response, safe=False)

方法2:全局关闭CSRF校验(不推荐,会降低全站安全等级)

仅当你的全站所有接口都不需要CSRF防护时使用,打开Django项目的settings.py文件,找到MIDDLEWARE配置列表,注释掉django.middleware.csrf.CsrfViewMiddleware这一行即可。

额外注意事项

如果后续需要保留CSRF校验能力,可调整请求逻辑:

  • Flutter端先发起一次GET请求,从返回的Cookie中取出csrftoken值
  • 后续发起POST请求时,在请求头中添加X-CSRFToken字段,值为取出的csrftoken即可通过校验

内容的提问来源于stack exchange,提问作者Ómár Táhá

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 22:15:00