【问题标题】:¿Why my CORS config in django is not working?¿ 为什么我在 django 中的 CORS 配置不起作用?
【发布时间】:2020-08-28 15:28:26
【问题描述】:

我的 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 运行不正常。

【问题讨论】:

    标签: python django api rest heroku


    【解决方案1】:

    在获取 django rest_api 之前,请确保您在后端 settings.py 中设置了 django-cors-headers。欲了解更多信息,请查看此link

    pip install django-cors-headers

    settings.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',
    ]
    
    

    【讨论】:

    • 确保您已将cors-middleware 添加到您的settings.py 文件中。
    猜你喜欢
    • 2017-12-25
    • 2018-07-19
    • 2018-02-21
    • 1970-01-01
    • 2015-05-25
    • 2010-12-05
    • 2019-04-21
    • 2019-12-04
    • 1970-01-01
    相关资源
    最近更新 更多