这里不推荐关闭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。希望次文章能够帮助需要的小伙伴们,也请有其他解决办法的大佬相互讨论下