首页 > 解决方案 > D3v5 和 Django Rest 框架

问题描述

我在使以下 AJAX 调用正常工作时遇到了一些麻烦。我正在使用 D3 版本 5 向 Django REST Framework (DRF) ModelViewSet(版本 3.x)视图发出以下 POST 请求。DRF 提供路径下的任务列表,/gander/tasks/并允许通过 POST 到同一路径创建新任务。我相信我正在正确检索 CSRF 令牌,但我不确定我是否正确地制定了 POST。

d3.json("/gander/tasks/?format=json",
 {method:"POST",
  headers:{
   "Content-type": "application/json; charset=UTF-8",
   "X-CSRFToken" : Cookies.get('csrftoken') },
  body:JSON.stringify({
   "parent": null,
   "name"  : "",
   "time"  : null}),
 })
 .then(json => {console.log(json);})
 .catch(error => {console.log(error);});

我浏览了 Django AJAX 文档、D3 示例和一堆 SO Questions,但它们都引用了 D3-Request 接口,我找不到使用上述较新的 D3-Fetch API 的任何示例。

标签: djangod3.jsdjango-rest-framework

解决方案


感谢@dkarchmer,我想我需要更多关于服务器端的信息。下面的 mixin 对于显示接收和传输的数据非常有用。

class AjaxLoggingMixin(object):

    def finalize_response(self, request, response, *args, **kwargs):
        print(request.data)
        print(response.data)
        return super().finalize_response(request, response, *args, **kwargs)

事实证明,请求是正确通过的,但格式不正确,Django 拒绝它们返回 4XX 错误代码。尤其是

  • 当用户未通过身份验证或未正确设置用户身份验证时,将出现 403 错误。

  • 数据格式错误时会产生 400 个结果。


推荐阅读