如何在 Django REST Framework 上启用 CORS
要在 Django REST Framework 上启用 CORS(跨域资源共享),你需要使用一个中间件来处理 CORS 相关的 HTTP 头信息。通常,最流行的解决方案是使用 django-cors-headers 包。下面是如何在 Django 项目中设置 CORS 的步骤:
django-cors-headers
首先,你需要安装 django-cors-headers 包。你可以使用 pip 来完成这个操作:
pip install django-cors-headers
corsheaders
INSTALLED_APPS
在你的 Django 项目的设置文件 settings.py 中,将 corsheaders 添加到 INSTALLED_APPS 列表:
settings.py
INSTALLED_APPS = [ ... 'corsheaders', ... ]
CorsMiddleware
MIDDLEWARE
在 settings.py 中,将 CorsMiddleware 添加到 MIDDLEWARE 列表的最上面,以确保它在其他中间件之前处理请求:
MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', 'django.middleware.security.SecurityMiddleware', ... 'django.middleware.common.CommonMiddleware', ... ]
在 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', ]
确保 Django 开发服务器正在运行:
python manage.py runserver
使用工具如 Postman 或浏览器插件来发起跨域请求,检查响应头是否包含 Access-Control-Allow-Origin 头信息。
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_URLS_REGEX
python CORS_URLS_REGEX = r'^/api/.*$'
CORS_EXPOSE_HEADERS
CORS_PREFLIGHT_MAX_AGE
通过以上步骤,你的 Django 应用应该能够根据你的配置正确处理 CORS 请求。请根据需要调整这些设置,特别是在生产环境中需要注意安全性。