如何使用Axios将内容发布到Django?

13

我正在从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视图是一个简单的基于类的视图。

我做错了什么?

1个回答

36

request.POST 仅适用于表单编码数据。如果您要发布JSON,则应改用 request.body

import json
json.loads(request.body.decode('utf-8'))
如果您这样做,您将需要更改基于类的视图以使用request.body代替。 如果您想让axios发送表单编码数据,这个GitHub上的问题可能会有所帮助。

使用request.body有风险吗? - Hiroyuki Nuri
2
不要只使用 request.POST。它是不可信的输入,因此您应该对其进行清理(例如,使用表单)。 - Alasdair
@Alasdair - body 应该总是解码 (decode('utf-8')) 吗? - Headmaster
1
@Headmaster 我认为是这样的。请参见我的类似答案 - Alasdair

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接