【问题标题】:D3v5 and Django Rest FrameworkD3v5 和 Django Rest 框架
【发布时间】:2018-09-10 15:19:46
【问题描述】:

我在使以下 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 A.J.A.X.文档、D3 示例和一堆 S.O.问题,但它们都涉及 D3-Request 接口,我找不到使用上述较新的 D3-Fetch API 的任何示例。

【问题讨论】:

  • 你试过不带 .stringify 吗?
  • 你能不能让它在其他情况下工作,例如使用 curl 而不是 d3-fetch?服务器返回什么错误信息?
  • @I_alarmed_alien,我得到的是 4XX,没有客户端的描述信息。我发布了让我重新开始的修复程序。感谢您和 dkarchmer 的指点。

标签: django d3.js django-rest-framework


【解决方案1】:

感谢@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 个结果。

【讨论】:

    猜你喜欢
    • 2015-01-04
    • 2015-08-07
    • 2014-04-21
    • 2015-04-26
    • 2015-07-16
    • 2020-07-27
    • 2018-06-12
    • 1970-01-01
    相关资源
    最近更新 更多