Django 中如何使用 URL 包装器来处理 CORS?
CORS(Cross-Origin Resource Sharing),即跨域资源共享,在前后端分离的开发中很常见,它允许一个域上的应用访问另一个域上的资源。在 Django 中,我们可以使用 URL 包装器来处理跨域请求。
首先,我们需要安装 django-cors-headers 库:
pip install django-cors-headers
然后,在 settings.py 中添加中间件:
MIDDLEWARE = [ # ... 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', # ... ]
接下来,在设置中添加允许访问的域名,可以是字符串或列表:
CORS_ORIGIN_WHITELIST = [ 'http://pidancode.com', 'http://example.com', ]
如果要允许所有域名访问,可以设置为:
CORS_ORIGIN_ALLOW_ALL = True
最后,在需要处理跨域请求的视图函数中,添加 @corsheaders.decorators.cors_allow_all 函数装饰器:
from corsheaders.decorators import cors_allow_all @cors_allow_all def my_view(request): # ...
这样,我们就可以处理跨域请求了。在访问跨域接口时,浏览器会自动发送 OPTIONS 请求以确认是否允许跨域访问。如果设置正确,则会返回 200 OK 状态码,否则会返回 403 Forbidden 状态码。
完整的 settings.py 文件示例:
INSTALLED_APPS = [ # ... 'corsheaders', # ... ] MIDDLEWARE = [ # ... 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', # ... ] CORS_ORIGIN_WHITELIST = [ 'http://pidancode.com', 'http://example.com', ] CORS_ALLOW_METHODS = [ 'GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS' ] CORS_ALLOW_HEADERS = [ 'accept', 'accept-encoding', 'authorization', 'content-type', 'dnt', 'origin', 'user-agent', 'x-csrftoken', 'x-requested-with' ]
参考文档:
- django-cors-headers 官方文档:https://github.com/adamchainz/django-cors-headers#configuration
- CORS 官方文档:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS
相关文章