Django REST+React Native发Delete请求报CSRF cookie not set错误
Django删除图片接口403 CSRF校验失败解决办法
报错核心是Django默认的CSRF防护机制对DELETE请求触发了校验,你的文件删除接口已经做了CSRF豁免处理,而新增的图片删除接口没有配置,所以出现一边正常一边403的情况。
方案1:给图片视图添加CSRF豁免装饰器(适配你当前的函数视图写法)
直接在视图函数上挂载csrf_exempt装饰器即可关闭该接口的CSRF校验,适配React Native前后端分离场景:
# 导入csrf_exempt装饰器 from django.views.decorators.csrf import csrf_exempt from .models import Uploads from django.http import HttpResponse @csrf_exempt # 新增这一行即可 def UploadsDetails(request,pk): try: image=Uploads.objects.get(pk=pk) except Uploads.DoesNotExist: return HttpResponse(status=404) if request.method =='DELETE': image.delete() return HttpResponse(status=204)
方案2:改用DRF标准接口写法(你项目已经用到Django REST,更推荐)
用DRF提供的api_view装饰器,默认自动关闭CSRF校验,同时适配REST接口的响应规范:
from rest_framework.decorators import api_view from rest_framework.response import Response from rest_framework import status from .models import Uploads @api_view(['DELETE']) def UploadsDetails(request,pk): try: image = Uploads.objects.get(pk=pk) except Uploads.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) image.delete() return Response(status=status.HTTP_204_NO_CONTENT)
验证说明
你可以核对下FileDetails视图的代码,一定是已经加了@csrf_exempt装饰器或者用了DRF的api_view装饰器,所以删除文件不会触发CSRF校验错误。
内容的提问来源于stack exchange,提问作者Rihab sabri
相关产品推荐
相关产品推荐

