DRF框架中csrf异常

前端之家收集整理的这篇文章主要介绍了DRF框架中csrf异常前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一.报错信息

"detail": "CSRF Failed: CSRF cookie not set."

二.解决办法

方法一:

配置文件中配置

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',)
}

方法二.在提交信息中加上csrf_token:

页面form框中设置

{% csrf_token %}
代码页面中的显示内容
<input type="hidden" name="csrfmiddlewaretoken" value="l9gICFdVzkDkLExUoAPRpE0ElkGtG70Xmn6u536Keo3kaQPXEeC00g5kbnY3vJGd">

如果是ajax提交的话

在data中加上

data:{
    ..
    ..
   'csrfmiddlewaretoken': '{{csrf_token}}' //或者 'csrfmiddlewaretoken':'l9gICFdVzkDkLExUoAPRpE0ElkGtG70Xmn6u536Keo3kaQPXEeC00g5kbnY3vJGd'
}

三.奇怪现象肯能与django中中间件有冲突

django中间件

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',]

如果在中间件中把'django.middleware.csrf.CsrfViewMiddleware',注释掉你用方法二的时候也会报错,只有方法一能正常使用

猜你在找的Django相关文章