django 如何处理No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
时间: 2024-06-26 16:01:38 浏览: 287
在Django中,当你尝试从一个不同源(origin)的JavaScript应用发送跨域请求时,可能会收到"No 'Access-Control-Allow-Origin' header is present"的错误。这是因为浏览器实施了同源策略(Same-Origin Policy),不允许跨域访问资源。为了解决这个问题,Django提供了几种方法来处理CORS(Cross-Origin Resource Sharing):
1. **使用中间件**:你可以使用`django-cors-headers`这个第三方中间件,安装并配置后,它会自动添加`Access-Control-Allow-Origin`头。在settings.py中添加它到MIDDLEWARE列表,并配置允许的来源:
```python
INSTALLED_APPS = [
# ...
'corsheaders',
]
MIDDLEWARE = [
# ...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
# ...
]
CORS_ORIGIN_ALLOW_ALL = True # 或者设置成特定的域名或通配符,如:
# CORS_ORIGIN_WHITELIST = ['http://yourdomain.com', 'https://api.yourdomain.com']
```
2. **在视图函数上设置**:如果你不打算使用全局中间件,也可以在单个视图或装饰器上添加CORS:
```python
from django.views.decorators.csrf import csrf_exempt
from corsheaders.decorators import cross_origin
@cross_origin()
@csrf_exempt
def your_view(request):
# ...
```
3. **自定义响应**:如果需要更细致的控制,你可以在返回的响应对象上手动添加`Access-Control-Allow-Origin`头:
```python
from rest_framework.response import Response
def your_view(request):
response = Response({'data': 'your_data'})
response['Access-Control-Allow-Origin'] = '*'
return response
```
记得在开发阶段开启调试模式(`DEBUG=True`),因为CORS策略在生产环境中可能不会生效。
阅读全文