如何使用 Axios 发布到 Django?

Posted

技术标签:

【中文标题】如何使用 Axios 发布到 Django?【英文标题】:How do I post to Django using Axios? 【发布时间】:2018-08-31 23:30:29 【问题描述】:

我正在从 Jquery AJAX 迁移到 Axios,因为我使用的是 ReactJS,所以我认为它更干净,我在向服务器发布简单请求时遇到了一些麻烦,post 方法通过我的视图但每当我 print(request.POST) ,我有一个空查询集 (<QueryDict: >)。

axios(
  method: 'post',
  url: SITE_DOMAIN_NAME + '/my_url_name/',
  data: 
    'tes1':'test',
    'tes2':'test'
  ,
  headers: 
    "X-CSRFToken": CSRF_TOKEN, 
    "content-type": "application/json"
  
).then(function (response) 
  console.log(response)
).catch(function (error) 
  console.log(error)
);

Django 视图是一个简单的 ClassBasedView。

我做错了什么?

【问题讨论】:

【参考方案1】:

request.POST 仅适用于表单编码数据。如果您发布 JSON,那么您应该使用 request.body

import json
json.loads(request.body.decode('utf-8'))

如果您这样做,则必须更改基于类的视图以改用 request.body

如果您想让 axios 改为发送表单编码数据,GitHub 上的this issue 可能会有所帮助。

【讨论】:

使用request.body有风险吗? 只使用request.POST。这是不受信任的输入,因此您应该清理它(例如使用表单)。 @Alasdair - 是否应该始终解码正文 (decode('utf-8'))? @Headmaster 我认为是的。见my similar answer。

以上是关于如何使用 Axios 发布到 Django?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 react 中使用 graphene-django 和 axios 将图像上传到我的服务器?

如何使用 Axios 将 CSRF Coo​​kie 从 React 发送到 Django Rest Framework

ReactJS 和 Django:如何以正确的方式使用 axios 发送 csrf 令牌?

如何在后端使用 Nuxt 和 Django 在我的 axios 请求中发送 CSRFToken?

如何使 django 中的 FileField 成为可选的?

如何使 django 中的 FileField 成为可选的?