若是你开发的项目出现了跨域问题, 那你可能须要 django-cors-headers
来解决你的烦恼, 它会添加 Cross-Origin Resource Sharing (CORS) 做为响应的标头, 以支持你从其余域上获取 Django 资源。 Github 地址python
要求 Python
版本最低为 3.5
要求 Django
版本最低为 2.2
使用 Python-pip
安装:git
python3 -m pip install django-cors-headers
复制代码
在项目的 settings.py
应用中注册组件:github
INSTALLED_APPS = [
...
# 添加你定义的 APP 前面, 优先级更高
'corsheaders',
...
]
复制代码
在项目的 settings.py
中间件中注册组件:shell
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
]
复制代码
CorsMiddleware
应该尽量放在前面, 使得它的优先级更高, 例如 Django 自带的 CommonMiddleware
或者 WhiteNoiseMiddleware
, 另外, 若是你正在使用 CORS_REPLACE_HTTPS_REFERER
的话, 它的优先级应该在 CsrfViewMiddleware
的前面。django
CORS_ORIGIN_ALLOW_ALL
api
若是值是 True
, 将不设置白名单, 将会容许全部请求访问资源。跨域
CORS_ORIGIN_WHITELIST
浏览器
容许访问跨域资源的主机列表, 默认是 []
, 例如:缓存
CORS_ORIGIN_WHITELIST = [
"http://127.0.0.1:9000"
]
复制代码
CORS_ORIGIN_REGEX_WHITELIST
安全
使用正则匹配的方式创建白名单, 它将会和请求的 Origins
相匹配, 例如:
CORS_ORIGIN_REGEX_WHITELIST = [
r"http://192\.168\.\d+\.\d+",
]
复制代码
CORS_URLS_REGEX
限制发送 CORS 标头的 URL 信息, 默认状况下是 r'^.*$'
意为容许全部的 URL 添加标头, 若是你只想在 /api/
开头的 URL 添加标头的话, 你能够这样作:
CORS_URLS_REGEX = r'^/api/.*$'
复制代码
CORS_ALLOW_METHODS
容许添加标头的请求方式, 默认为:
CORS_ALLOW_METHODS = [
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
]
复制代码
你能够导入默认配置, 那你也能够对他进行拓展, 并获取它的最新配置数据:
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',
]
复制代码
你也能够导入默认值, 进行拓展, 并得到最新的配置数据:
from corsheaders.defaults import default_headers
CORS_ALLOW_HEADERS = list(default_headers) + [
'my-custom-header',
]
复制代码
CORS_EXPOSE_HEADERS
将向浏览器公开的HTTP标头列表, 默认是 []
。
CORS_PREFLIGHT_MAX_AGE
客户端/浏览器能够缓存预检响应的秒数, 若是配置数据是 0
或者其余非法数值, 都不会发送最大期限标头, 默认状况下是一天:86400
。
CORS_ALLOW_CREDENTIALS
若是为 True
, 则将容许将 cookie 包含在跨站点的 HTTP 请求中, 默认为 False
, 在 Django 2.1 中,添加了 SESSION_COOKIE_SAMESITE
设置, 默认状况下设置为 Lax
, 这将防止 Django 的会话跨域发送, 设置为 None
能够绕过此安全限制。
CORS_REPLACE_HTTPS_REFERER
CORS_REPLACE_HTTPS_REFERER
为 True
, 那么 CorsMiddleware
会将 Referer
头更改成每当 CORS 检查经过时都会经过 Django 的 CSRF 检查的内容, 默认为 False
。
2020 咱们一块儿加油, 中国加油。