欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

django的post请求出现csrf问题

程序员文章站 2024-01-25 19:52:58
...

这里不推荐关闭csrf认证,如有需要可以在setting中将’django.middleware.csrf.CsrfViewMiddleware’这个中间件注释

  • 一般视图

如下视图,直接使用@csrf_exempt这个装饰器即可,这个基本都会解决的

@csrf_exempt
def csrf_test(request):
    return JsonResponse()
  • 继承APIView的视图

使用@method_decorator(csrf_exempt, name=‘post’)装饰器,这个方法是从网上找的,但我失败了

@method_decorator(csrf_exempt, name='post')
class Danmu_Handle(APIView):
	def post(self, request, *args, **kwargs):
		return JsonResponse()

或者在前端发送时数据额外添加一条数据,这是ajax全局设置,作用是在发送每一次请求时都会附加这个csrfmiddlewaretoken数据,而这个数据是我在cookie中获取的,使用了jquery.cookie.js插件,或者使用document.cookie得到所有cookie然后分隔。

token = $.cookie('csrftoken');
$.ajaxSetup(
        {
            data: {'csrfmiddlewaretoken': token}
        }
    )

在前端添加数据的做法肯定是可行的,但如果从后端着手,不管是修改REST_FRAMEWORK的认证类,还是增加跨域忽略,都会出现403,尽管如此我还是不想关闭csrf。希望次文章能够帮助需要的小伙伴们,也请有其他解决办法的大佬相互讨论下