csrftoken不会自动添加到restframe工作的APIView中。默认情况下,它在SessionAuthentication中使用。但是ssionAuthentication是不安全的,因此我使用应该编写的TokenAuthentication。那么我应该如何在restframe的APIView的POST方法中添加csrf身份验证
我在HTML或{“ X-CSRFToken”:'{{csrf_token}}'}中添加{%csrf_token%} 但是我在请求cookie和POST数据以及标头中都没有发现csrftoken的痕迹。默认的django csrf中间件不起作用吗?我应该自己编写中间件吗?
f我使用View,以下是收到的request.COOKIES,request.POST,request.META.get(“ HTTP_X_CSRFTOKEN”)
{}
<QueryDict: {'username': ['xx'], 'password': ['123'], 'remember': ['false']}>
None
如果我使用APIView,
{'csrftoken': 'syyAdWYJMk1xVJ7OS02jJU0S4J345YxlvbBnxPPXGz3Iw7wU2laqd7xgDla0xl8e'}
<QueryDict: {'username': ['xx'], 'password': ['123'], 'remember': ['false']}>
GmwhLBtnLbKjzUwSUtaGHpMfe9U0LWoEJZz45ukBFqMuaiVY4OiNbCjDNL1WdjZx
为什么?
答案 0 :(得分:0)
有两个选项。
settings.py
REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
),
}
在每个视图中
from rest_framework.authentication import SessionAuthentication
在您基于班级的视图中:
authentication_classes =[SessionAuthentication]