关于python:从REST Django Django和Angular检索数据

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/',
     })