【问题标题】:Cross-Origin Request Blocked Django and React跨域请求阻止了 Django 和 React
【发布时间】:2021-04-01 21:31:36
【问题描述】:

我已安装pip install django-cors-headers 仍然无法正常工作

添加到 settings.py 文件中

INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
]

MIDDLEWARE = [
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

Django 休息框架

【问题讨论】:

标签: javascript python reactjs django django-rest-framework


【解决方案1】:

我在项目解决方案中也遇到了同样的问题

  1. 将 corsheaders.middleware.CorsMiddleware 放在顶部

    MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    ..........
    ..........
    ]
    
  2. ALLOWED_HOSTS = ['*']

  3. 在settings.py底部添加

     CORS_ORIGIN_ALLOW_ALL = True
    

根据Documentation CorsMiddleware 应该放在尽可能高的位置,尤其是在任何可以生成响应的中间件之前,例如 Django 的 CommonMiddleware 或 Whitenoise 的 WhiteNoiseMiddleware。如果不是之前,它将无法将 CORS 标头添加到这些响应中。

另外,如果你使用 CORS_REPLACE_HTTPS_REFERER,它应该放在 Django 的 CsrfViewMiddleware 之前(见下文)。

【讨论】:

    【解决方案2】:

    通常,对于此类错误,您需要将settings.py 更新为django-cors-headers

    # update backend/server/server/settings.py
    # ...
    INSTALLED_APPS = [
        #...
        'corsheaders', # add it here
        #...
    ]
    
    # define which origins are allowed
    CORS_ALLOWED_ORIGINS = [
        "http://localhost:3000",
        "http://127.0.0.1:3000"
    ]
    
    # add to middleware
    MIDDLEWARE = [
        #...
        'corsheaders.middleware.CorsMiddleware',
        'django.middleware.common.CommonMiddleware',
        #...
    ]
    

    有时您还需要设置ALLOWED_HOSTS=["127.0.0.1"] 或您的其他地址(您也可以尝试使用“*”,但仅用于调试)。

    您可以在我的文章中查看详细信息:React Token Based Authentication to Django REST API Backend

    还请尝试在网络浏览器中清除缓存的情况下运行测试。

    如果这没有帮助,请提供有关您的项目设置的更多详细信息。

    【讨论】:

    猜你喜欢
    • 2018-11-30
    • 2020-12-22
    • 2019-12-04
    • 2019-07-17
    • 2022-01-28
    • 2020-08-10
    • 2023-03-21
    • 2019-12-19
    • 2023-03-28
    相关资源
    最近更新 更多