Django 配置跨域访问

Django 配置跨域访问

django-cors-headers 是一个 Django 应用程序,用于处理跨域资源共享 (CORS) 所需的服务器标头。

安装
python -m pip install django-cors-headers

然后在项目的seting.py 文件下添加如下信息

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

确保添加尾随逗号,否则可能会收到ModuleNotFoundError 错误提示

还需要在项目的seting.py文件下添加一个中间件类来监听响应

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

CorsMiddleware应放在尽可能高,特别是可以产生如Django的回应任何中间件之前,入上文中的django.middleware.common.CommonMiddleware

配置

在 Django 设置中配置中间件的行为。必须至少设置以下三个设置之一:

  • CORS_ALLOWED_ORIGINS
  • CORS_ALLOWED_ORIGIN_REGEXES
  • CORS_ALLOW_ALL_ORIGINS

CORS_ALLOWED_ORIGINS

授权发出跨站点 HTTP 请求的源列表。默认为[]

例子:

CORS_ALLOWED_ORIGINS  =  [ 
    "https://example.com" , 
    "https://sub.example.com" , 
    "http://localhost:8080" , 
    "http://127.0.0.1:9000" 
]

以前这个设置被称为CORS_ORIGIN_WHITELIST,它仍然作为别名使用,新名称优先。

CORS_ALLOWED_ORIGIN_REGEXES

表示与 Origins 匹配的正则表达式的字符串列表,这些 Origins 被授权发出跨站点 HTTP 请求。默认为[]。当CORS_ALLOWED_ORIGINS不切实际时 很有用,例如当您有大量子域时。

例子:

CORS_ALLOWED_ORIGIN_REGEXES  =  [ 
    r "^https://\w+\.example\.com$" , 
]

以前此设置称为CORS_ORIGIN_REGEX_WHITELIST,它仍然用作别名,新名称优先。

CORS_ALLOW_ALL_ORIGINS

如果为True,则将允许所有来源。其他限制允许来源的设置将被忽略。默认为False

将此设置为True可能很危险,因为它允许任何网站向您的网站发出跨域请求。通常,您需要使用CORS_ALLOWED_ORIGINSCORS_ALLOWED_ORIGIN_REGEXES来限制允许来源的列表。

以前这个设置被称为CORS_ORIGIN_ALLOW_ALL,它仍然作为别名使用,新名称优先。

以下是可选设置,默认值可能就足够了。

CORS_URLS_REGEX

限制将发送 CORS 标头的 URL 的正则表达式。默认为r'^.*$',即匹配所有 URL。当您只需要在站点的一部分上使用 CORS 时很有用,例如/api/ 中的 API 。

例子:

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

CORS_ALLOW_METHODS

允许用于实际请求的 HTTP 动词列表。默认为:

CORS_ALLOW_METHODS  =  [ 
    'DELETE' , 
    'GET' , 
    'OPTIONS' , 
    'PATCH' , 
    'POST' , 
    'PUT' , 
]

默认值可以作为corsheaders.defaults.default_methods导入,因此您可以使用自定义方法对其进行扩展。这使您可以跟上任何未来的变化。例如:

from corsheaders.defaults import default_methods

CORS_ALLOW_METHODS = list(default_methods) + [
    'POKE',
]

CORS_ALLOW_HEADERS

发出实际请求时可使用的非标准 HTTP 标头列表。默认为:

CORS_ALLOW_HEADERS  =  [ 
    'accept' , 
    'accept-encoding' , 
    'authorization' , 
    'content-type' , 
    'dnt' , 
    'origin' , 
    'user-agent' , 
    'x-csrftoken' , 
    'x-requested-with' , 
]

默认值可以作为corsheaders.defaults.default_headers导入,因此您可以使用自定义标头对其进行扩展。这使您可以跟上任何未来的变化。例如:

from corsheaders.defaults import default_headers

CORS_ALLOW_HEADERS = list(default_headers) + [
    'my-custom-header',
]

CORS_EXPOSE_HEADERS

要向浏览器公开的 HTTP 标头列表。默认为 []

CORS_PREFLIGHT_MAX_AGE

客户端/浏览器可以缓存预检响应的秒数。如果这是 0(或任何 falsey 值),则不会发送最大年龄标头。默认为 86400(一天)。

CORS_ALLOW_CREDENTIALS

如果为True,将允许 cookie 包含在跨站点 HTTP 请求中。默认为False

注意:在 Django 2.1中添加了SESSION_COOKIE_SAMESITE设置,默认设置为 “Lax”,这将防止 Django 的会话 cookie 被跨域发送。将其更改为None以绕过此安全限制。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值