DRF框架中csrf異常

一.報錯信息

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

二.解決辦法

方法一:html

在配置文件中配置python

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

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

頁面form框中設置django

{% csrf_token %}
這代碼在頁面中的顯示內容
<input type="hidden" name="csrfmiddlewaretoken" value="l9gICFdVzkDkLExUoAPRpE0ElkGtG70Xmn6u536Keo3kaQPXEeC00g5kbnY3vJGd">

若是是ajax提交的話cookie

在data中加上session

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',註釋掉你用方法二的時候也會報錯,只有方法一能正常使用rest

相關文章
相關標籤/搜索