【问题标题】:How do I post to Django using Axios?如何使用 Axios 发布到 Django?
【发布时间】: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。

我做错了什么?

【问题讨论】:

    标签: javascript django post axios


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2022-11-11
    • 2021-11-26
    • 2022-01-25
    • 2018-11-11
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    相关资源
    最近更新 更多