首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让本地实例或React命中Django的本地实例

如何让本地实例或React命中Django的本地实例
EN

Stack Overflow用户
提问于 2018-12-31 10:34:13
回答 2查看 66关注 0票数 0

我有一个本地运行的django api (djangorestframekwork,django2.1,python3.6)-- http://127.0.0.1:8000/api/cards/b361d7e2-6873-4890-8f87-702d9c89c5ad。这个api似乎工作得很好。我可以通过web api点击它,或者使用curl/request来添加或查看数据库。

现在,我希望能够让我的React项目访问此api。我可以让我的react项目访问不同的api并返回数据,但是当我用我自己的URI替换该URI时,它就会中断。

App.js -有一行被注释掉了。将其切换到其他api,以便在公共api和私有api之间切换。

代码语言:javascript
复制
import React from 'react'
import keyforge from '../api/keyforge'
import localhost from '../api/localhost'
import SearchBar from './SearchBar'

class App extends React.Component {

    onSearchSubmit = async (term) => {    
    const response = await localhost.get("api/cards/" + term)
    //const response = await keyforge.get("api/decks/" + term)
    console.log(response)
  }

  render () {
    return (<div className='ui container'>
      <SearchBar onSubmit={this.onSearchSubmit} />
    </div>)
  }
}
export default App

keyforge.js -这个可以用!

代码语言:javascript
复制
import axios from 'axios'
const proxyurl = 'https://cors-anywhere.herokuapp.com/'
const url = 'https://www.keyforgegame.com/'    
export default axios.create({
  // baseURL: 'https://www.keyforgegame.com/api/decks/'
  baseURL: proxyurl + url
})

localhost.js -此命令不起作用

代码语言:javascript
复制
import axios from 'axios'

const proxyurl = 'https://cors-anywhere.herokuapp.com/'
const url = 'http://127.0.0.1:8000/'

export default axios.create({
  baseURL: proxyurl + url
})

错误消息:

代码语言:javascript
复制
GET https://cors-anywhere.herokuapp.com/http://127.0.0.1:8000/api/cards/b361d7e2-6873-4890-8f87-702d9c89c5ad 404 (Not Found)

Uncaught (in promise) Error: Request failed with status code 404
at createError (createError.js:17)
at settle (settle.js:19)
at XMLHttpRequest.handleLoad (xhr.js:78)

在我的计算机上- http://127.0.0.1:8000/api/cards/b361d7e2-6873-4890-8f87-702d9c89c5ad将我带到那个特定元素的Django api页面。如果我去掉cors-anywhere url,我会得到这个错误-

代码语言:javascript
复制
Access to XMLHttpRequest at 'http://127.0.0.1:8000/api/cards/b361d7e2-6873-4890-8f87-702d9c89c5ad' from origin 'http://127.0.0.1:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我将这个api url放在前面,以解决您在访问公共cors-anywhere时看到的No Access-Control-Allow-Origin错误。由于我在访问自己的私有api时得到了相同的错误,因此我使用了相同的解决方案(例如,在我的url中添加了cors-anywhere url。

有什么想法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-31 12:48:34

可能是因为您没有在django rest项目中启用CORS。有一个名为django-cors-headers的工具,通过pip install django-cors-headers安装它,添加它的中间件,并在settings.py文件中启用它。

代码语言:javascript
复制
pip install django-cors-headers

然后将其添加到已安装的应用程序:

代码语言:javascript
复制
INSTALLED_APPS = (
...
'corsheaders',
...
)

添加它的中间件:

代码语言:javascript
复制
MIDDLEWARE_CLASSES = (
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
)

最后,将此变量添加到settings.py文件的末尾:

代码语言:javascript
复制
CORS_ORIGIN_ALLOW_ALL = True

在这里找到更多关于它的信息:django-cors-headers on github

票数 1
EN

Stack Overflow用户

发布于 2018-12-31 12:28:43

您的keyforge.js文件可以工作,因为您正在访问一个已经托管的网站,该网站在其后端也启用了CORS。您还需要在Django后端添加CORS。从你所说的看来,你似乎只是在前端添加了它。也许像这样的东西能帮到你。

How can I enable CORS on Django REST Framework

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53983058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档