首页 > 解决方案 > ¿ 为什么我在 django 中的 CORS 配置不起作用?

问题描述

我的 production.py 文件中有我的 REST API 设置。此 REST API 已上传到 Heroku,并django-cors-headers与以下配置一起使用:

# Application definition
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # Third-Party apps
    'rest_framework',
    'rest_framework.authtoken',
    'corsheaders',
    'gunicorn',
    
    # Local apps
    'core',
    'users',
    'checkers',
]

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

CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = (
    'myapi.herokuapp.com'
)

将 myapi.herokuapp.com 放入 CORS_ORIGIN_WHITELIST 的想法是查看发出请求localhost是否被拒绝(这是正确的做法)。但是这是被接受的,这让我明白 CORS 运行不正常。

标签: pythondjangoapirestheroku

解决方案


在获取 django rest_api 之前,请确保您django-cors-headers在后端进行了设置settings.py。有关更多信息,请查看此链接

pip install django-cors-headers

设置.py:

INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
]
MIDDLEWARE = [  # Or MIDDLEWARE_CLASSES on Django < 1.10
    ...
    'corsheaders.middleware.CorsMiddleware',
    'corsheaders.middleware.CorsPostCsrfMiddleware',
    ...
]

CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = (
    'your-server-IP-address'
)
CORS_ALLOW_METHODS = [
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
]


推荐阅读