Django-CSRF token missing or incorrect.(用户验证机制)

PS 官方链接:https://docs.djangoproject.co...

一、Django settings 配置 CSRF

1.1、Setting.py

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',#确认存在
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

1.2、html中的form添加模板标签

<form action="." method="post">{% csrf_token %}

1.3、views.py

from django.shortcuts import render_to_response
from django.template import RequestContext
  
def some_view(request):
    # ...
    return render_to_response('my_template.html',
                              my_data_dictionary,
                              context_instance=RequestContext(request))

1.4、屏蔽CSRF

# 如果要屏蔽CSRF
 
 
方法1:注释掉django工程settings.py中
    #'django.middleware.csrf.CsrfViewMiddleware'
 
 
方法2:django工程views.py添加屏蔽装饰器
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def some_view(request):
    #...

三、Requests 请求时遇到 CSRF

  • 最近在尝试用Django做后台api接口,用到了自带的用户验证机制:https://docs.djangoproject.co...

  • 在初次登录成功后一直弹出
    image

  • 其实并不是跨域问题,而是django自带的用户验证机制

  • 我们只需在请求头中添加X-CSRFToken

  • 步骤如下:

    • 在请求头中添加X-CSRFToken与返回的cookie中的csrftoken便可以(这里用的接口软件为postman)
    • 开启了postman同步chrom浏览器中的cookie

image
image
image

  • 之后再次POST提交成功(这里的功能是登录)
posted @ 2021-05-30 15:15  SRE运维充电站  阅读(613)  评论(0编辑  收藏  举报