Retrieve data from API REST Django and Angular
我正在尝试从使用Django设置的其余api中检索json。
此数据当前仅托管于:http://127.0.0.1:8000/xyz
当我尝试使用
检索它时
1 2 3 4 | $http({ method: 'GET', url: 'http://127.0.0.1:8000/xyz', }) |
我得到的错误是:
XMLHttpRequest无法加载http://127.0.0.1:8000/xyz。所请求的资源上没有" Access-Control-Allow-Origin"标头。因此不允许访问来源'http://127.0.0.1:8080'。
有人可以告诉我一种处理方法吗?
谢谢!
这是我的Django设置文件夹:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | INSTALLED_APPS = ( 'student', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'corsheaders' ) MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware' ) CORS_ALLOW_CREDENTIALS = True CORS_ORIGIN_ALLOW_ALL = True CORS_URLS_REGEX = r'^/api.*$' CORS_ORIGIN_WHITELIST = ( 'mydomain', 'localhost:3000', 'http://127.0.0.1:8000/' ) |
研究使用django-cors-headers来让Django返回正确的头文件。然后,您可以为您的网站创建白名单(http://127.0.0.1:8080用于开发,以及您最终用于生产的任何域)
我在设置中使用以下内容进行类似的设置:
1 2 3 4 5 6 7 8 | INSTALLED_APPS += ('corsheaders',) CORS_ALLOW_CREDENTIALS = True CORS_ORIGIN_ALLOW_ALL = True CORS_URLS_REGEX = r'^/api.*$' CORS_ORIGIN_WHITELIST = ( 'mydomain', 'localhost:3000', ) |
您可能还需要将以下内容添加到Angular项目中:
1 | $http.defaults.useXDomain = true; |
[更新]
有关更多详细信息,请参见此博客
除了settings.py的更改之外,请尝试在要调用的网址末尾添加斜杠
1 2 3 4 5 | $http({ method: 'GET', - url: 'http://127.0.0.1:8000/xyz', + url: 'http://127.0.0.1:8000/xyz/', }) |