zoukankan      html  css  js  c++  java
  • 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',注释掉你用方法二的时候也会报错,只有方法一能正常使用

  • 相关阅读:
    假期周进度报告02
    假期周进度报告01
    浪潮之巅阅读笔记6
    浪潮之巅阅读笔记5
    浪潮之巅阅读笔记4
    科技创新平台年报系统利益相关者分析
    浪潮之巅阅读笔记3
    浪潮之巅阅读笔记2
    浪潮之巅阅读笔记1
    Linux Redis 重启数据丢失解决方案,Linux重启后Redis数据丢失解决方
  • 原文地址:https://www.cnblogs.com/pythonywy/p/11622917.html
Copyright © 2011-2022 走看看