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 两因素身份验证

怎么安装django rest framework

django rest framework中文介绍

17-Django-Django REST framework-REST framework及RESTful简介

为啥 django-rest-framework 不显示 OneToOneField 数据 - django