小能豆

如何在 Django REST Framework 上启用 CORS

javascript

如何在 Django REST Framework 上启用 CORS


阅读 51

收藏
2024-07-22

共1个答案

小能豆

要在 Django REST Framework 上启用 CORS(跨域资源共享),你需要使用一个中间件来处理 CORS 相关的 HTTP 头信息。通常,最流行的解决方案是使用 django-cors-headers 包。下面是如何在 Django 项目中设置 CORS 的步骤:

1. 安装 django-cors-headers

首先,你需要安装 django-cors-headers 包。你可以使用 pip 来完成这个操作:

pip install django-cors-headers

2. 添加 corsheadersINSTALLED_APPS

在你的 Django 项目的设置文件 settings.py 中,将 corsheaders 添加到 INSTALLED_APPS 列表:

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

3. 将 CorsMiddleware 添加到 MIDDLEWARE

settings.py 中,将 CorsMiddleware 添加到 MIDDLEWARE 列表的最上面,以确保它在其他中间件之前处理请求:

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

4. 配置 CORS 设置

settings.py 中,你需要配置允许哪些源进行跨域请求。以下是一些常见的设置:

# 允许所有来源的跨域请求
CORS_ALLOW_ALL_ORIGINS = True

# 或者,允许特定的来源
CORS_ALLOWED_ORIGINS = [
    'http://localhost:3000',
    'https://example.com',
]

# 允许特定的 HTTP 请求头
CORS_ALLOW_HEADERS = [
    'content-type',
    'authorization',
]

# 允许特定的 HTTP 方法
CORS_ALLOW_METHODS = [
    'GET',
    'POST',
    'PUT',
    'PATCH',
    'DELETE',
    'OPTIONS',
]

5. 测试你的设置

确保 Django 开发服务器正在运行:

python manage.py runserver

使用工具如 Postman 或浏览器插件来发起跨域请求,检查响应头是否包含 Access-Control-Allow-Origin 头信息。

示例配置

以下是一个包含 CORS 配置的 settings.py 示例:

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

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

# 允许所有来源的跨域请求(生产环境中不推荐)
CORS_ALLOW_ALL_ORIGINS = True

# 或者,允许特定的来源
CORS_ALLOWED_ORIGINS = [
    'http://localhost:3000',
    'https://example.com',
]

# 允许特定的 HTTP 请求头
CORS_ALLOW_HEADERS = [
    'content-type',
    'authorization',
]

# 允许特定的 HTTP 方法
CORS_ALLOW_METHODS = [
    'GET',
    'POST',
    'PUT',
    'PATCH',
    'DELETE',
    'OPTIONS',
]

附加配置

  • 对于特定的路径:如果你只想对特定路径启用 CORS,可以使用 CORS_URLS_REGEX 配置来指定 URL 模式。

python CORS_URLS_REGEX = r'^/api/.*$'

  • 处理其他 CORS 选项django-cors-headers 还提供了其他配置选项,如 CORS_EXPOSE_HEADERSCORS_PREFLIGHT_MAX_AGE 等,具体可以参考 django-cors-headers 文档

通过以上步骤,你的 Django 应用应该能够根据你的配置正确处理 CORS 请求。请根据需要调整这些设置,特别是在生产环境中需要注意安全性。

2024-07-22