Django-rest交叉原始请求失败

问题描述 投票:1回答:2

我已经安装了django-cors-headers,我的seetings.py有以下内容:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'corsheaders',
    'rest_framework_docs',
    'tasks'
]

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

CORS_ORIGIN_ALLOW_ALL = True

但是,当我从Angular前端点击url时,仍然会出现Request header field Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers in preflight response错误。

我错过了任何配置吗?

django angular django-rest-framework django-cors-headers
2个回答
1
投票

你需要添加:

CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = False

你的settings.py也可以工作;)


0
投票

问题不在后端,我在角度服务中有一个功能如下:

  getTasks(): Observable<Task[]> {

    let headers = new Headers({ 'Access-Control-Allow-Origin': '*' });
    let options = new RequestOptions({ headers: headers });

    return this.http.get(this.taskUrl, options)
    .map(this.extractData)
    .catch(this.handleError);
  }

必须是:

  getTasks(): Observable<Task[]> {

    return this.http.get(this.taskUrl)
    .map(this.extractData)
    .catch(this.handleError);
  }
© www.soinside.com 2019 - 2024. All rights reserved.