如何使用Axios发布到Django?

Hir*_*uri 3 javascript django post axios

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

这是JS:

axios({
  method: 'post',
  url: SITE_DOMAIN_NAME + '/my_url_name/', #http://127.0.0.1:8000/my_url_name
  data: {
    'tes1':'test',
    'tes2':'test'
  },
  headers: {
    "X-CSRFToken": CSRF_TOKEN, 
    "content-type": "application/json" #tried without content-type too.
  }
}).then(function (response) {
  console.log(response)
}).catch(function (error) {
  console.log(error)
});
Run Code Online (Sandbox Code Playgroud)

Django视图是一个简单的ClassBasedView.

我究竟做错了什么?

Ala*_*air 9

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

import json
json.loads(request.body.decode('utf-8'))
Run Code Online (Sandbox Code Playgroud)

如果您这样做,则必须对基于类的视图进行更改才能使用request.body.

如果你想让axios发送表单编码数据,GitHub上的这个问题可能有所帮助.

  • 仅仅使用`request.POST`.这是不可信的输入,所以你应该清理它(例如使用表格). (2认同)