为什么我在发送带有superagent的POST请求时在django端获得GET请求

时间:2016-03-30 13:06:45

标签: python django superagent

我正在使用superagent.js向服务器应用程序发送POST请求。该请求将发送到django视图。但我在观点方面得到了GET请求。

以下是我的代码,我尝试使用superagent发送请求:

request.post('/nameofview')
.set('Content-type', 'application/x-www-form-urlencoded')
.set('X-CSRFToken', csrf)
.send({name: 'name'})
.end(callback)

这些是来自django开发服务器的日志:

[30/Mar/2016 12:27:28] "POST /nameofview HTTP/1.1" 302 0
[30/Mar/2016 12:27:28] "GET /ru/nameofview HTTP/1.1" 404(<--Raising not found from within the view) 1696

因此,django项目url调度程序正在接收发布请求,但随后将其重定向到应用程序视图作为get请求。 我对网址匹配没有任何问题。执行进入视图代码,但这是一个获取请求而不是帖子,这就是为什么我无法获取我发送的帖子数据。

这是我的观看代码:

def nameofview(request):
    if 'name' in request.POST:
        # make some staff
        return JsonResponse({'result': result})
    else:
        raise Http404()

从这个post,我发现我必须在我的帖子请求中附加一个csrftoken,当然我这样做是因为here描述没有任何成功。

所以,我的问题是,为什么要这样做,如何让它不触及我的帖子请求?

P.S。它可以毫无问题地使用get请求。

1 个答案:

答案 0 :(得分:0)

Mounir似乎走在了正确的轨道上。然而,尾随/似乎不是问题。相反,Django正在所请求的URL的前面添加/ruru可能是您在网址中编码的语言的描述符吗?如果是,请尝试拨打request.post('/ru/nameofview/')

另一方面,superagent似乎用GET请求而不是POST来调用重定向,因此Mounir提出的allow_redirects=True函数也可以做到这一点,尽管我是不熟悉那个图书馆。