Django Rest Framework ModelViewSet 视图没有从数据表中看到 CSRFToken
Posted
技术标签:
【中文标题】Django Rest Framework ModelViewSet 视图没有从数据表中看到 CSRFToken【英文标题】:Django Rest Framework ModelViewSet View Not seeing CSRFToken from datatables 【发布时间】:2020-12-17 17:35:46 【问题描述】:除了 djangorestframework 之外,我还在使用 djangorestframework-datatables 包。除了 django 文档中提供的在标头中设置 X-CSRFToken 的 ajax 设置之外,我还使用 datatables ajax 函数在标头中设置了 CSRFToken:
Data.columns = [];
$('th').each(function(item,i)
Data.columns.push('data': $(this).text().trim())
);
$('#searchtable').DataTable(
'serverSide': true,
'ajax':
'url': '/api/v1/reports/?format=datatables',
'type': 'POST',
'columns': Data.columns,
'headers': 'CSRFToken': Data.csrftoken ,
);
这是我正在写的视图的 drf 代码:
class ReportViewSet(viewsets.ModelViewSet):
queryset = Report.objects.all()
serializer_class = ReportSerializer
permission_classes = [IsAuthenticated]
我得到的错误是:“CSRF 失败:CSRF 令牌丢失或不正确” - 这是在响应中
谁能帮忙?
【问题讨论】:
【参考方案1】:在example app中配置如下:
$('#albums_post').DataTable(
"serverSide": true,
"ajax":
"url": "api/post-list/albums/?format=datatables",
"type": "POST",
"beforeSend": function(xhr)
xhr.setRequestHeader("X-CSRFToken", " csrf_token|escapejs ");
,
【讨论】:
以上是关于Django Rest Framework ModelViewSet 视图没有从数据表中看到 CSRFToken的主要内容,如果未能解决你的问题,请参考以下文章
Django-rest-framework 和 django-rest-framework-jwt APIViews and validation Authorization headers
Django Rest Framework 和 django Rest Framework simplejwt 两因素身份验证