使用Django rest框架获取请求不会返回数据

时间:2018-12-17 13:23:47

标签: django api

我已经用React / Redux前端设置了Django应用。我已经使用Django Rest Framework建立了一个简单的API,并确认在Django开发服务器运行的情况下,一个cURL请求会从mySQL数据库返回有效数据。

但是,当我在网页中使用提取请求时,没有数据返回到JavaScript代码。

这是我的JavaScript:

let headers = { 'Content-Type': 'application/json' };
return fetch('/api/lists/', { headers, })
    .then(res => {
        console.log('res ', res);
});

这是控制台运行时打印的内容:

Response {type: "basic", url: "http://127.0.0.1:8000/api/lists/", redirected: false, status: 200, ok: true, …}
body
:
(...)
bodyUsed
:
false
headers
:
Headers {}
ok
:
true
redirected
:
false
status
:
200
statusText
:
"OK"
type
:
"basic"
url
:
"http://127.0.0.1:8000/api/lists/"
__proto__
:
Response

显然不一样!

我已经选择了浏览器在“网络”标签中发送的请求,并选择了“复制”>“复制为cURL”:

curl 'http://127.0.0.1:8000/api/lists/' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-GB,en-US;q=0.9,en;q=0.8' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' -H 'Content-Type: application/json' -H 'Accept: */*' -H 'Referer: http://127.0.0.1:8000/' -H 'Connection: keep-alive' --compressed

如果将其粘贴到终端窗口中并运行它,则会收到JSON响应:

[{"id":1,"title":"My first list","description":"A list is useful","is_public":false}]

所以我认为一切都在服务器端进行,并且我必须在客户端网页上做错了事。

我正在8000端口上运行Django开发服务器,这是发出请求时记录的内容:

"GET /api/lists/ HTTP/1.1" 200 85

无论我是从客户端发送请求还是使用cURL,它都会记录完全相同的输出。

所以,我很困惑。服务器认为它正在接收相同的请求。如果将浏览器的请求复制为cURL并在终端中运行,我将获得有效的JSON响应。但是客户端在响应中看不到JSON。

非常感谢任何想法!

2 个答案:

答案 0 :(得分:0)

正文中的(...)在chrome控制台中可单击。您的身体数据可能在那里。

答案 1 :(得分:0)

非常感谢Sergey Pugach为我指明了正确的方向。我需要做一个额外的步骤来从响应中获取数据:

let headers = { 'Content-Type': 'application/json' };
return fetch('/api/lists/', { headers, })
    .then(res => res.json())
    .then(data => {
        console.log(data);
        // do something with data
    });

请注意,响应的形式会随您用于发送请求的库的不同而不同。例如,Django Rest Framework需要与Axios不同的处理方式。