Django 中如何使用 URL 包装器来处理 CORS?

2023-04-11 00:00:00 django 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

相关文章