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...
-
在初次登录成功后一直弹出
-
其实并不是跨域问题,而是django自带的用户验证机制
-
我们只需在请求头中添加X-CSRFToken
-
步骤如下:
- 在请求头中添加X-CSRFToken与返回的cookie中的csrftoken便可以(这里用的接口软件为postman)
- 开启了postman同步chrom浏览器中的cookie
- 之后再次POST提交成功(这里的功能是登录)
向往的地方很远,喜欢的东西很贵,这就是我努力的目标。