CORS

Cross-Origin Resource Sharing (CORS):

Cross-Origin Resource Sharing跨域资源共享
需要Python 3.5 to 3.8版本,Django 1.11 to 3.0 版本:

  1. 下载django-cors-headers
python -m pip install django-cors-headers
  1. 将corsheaders添加进设置settings中的INSTALLED_APPS
INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
]
  1. 添加中间件,监听响应,它的位置越高越好,特别是在任何可以生成响应的中间件之前,比如Django的CommonMiddleware。如果不是在此之前,它将无法将CORS标头添加到这些响应中。。
MIDDLEWARE = [ 
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]
  1. 添加白名单:设置settings中添加允许访问的hosts

需设置的参数有三个:

CORS_ORIGIN_WHITELIST=[]    # 默认列表是空;
CORS_ORIGIN_ALLOW_ALL=False			# 默认值为False;
CORS_ORIGIN_REGEX_WHITELIST==False		# 默认值为False。

方式一:设置允许所有的hosts访问

CORS_ORIGIN_ALLOW_ALL=TRUE

方式二:指定的hosts允许访问,添加格式:URI方案(协议:http或https等)+主机名(或者IP)+端口

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

注意:当有大量的子域时,可以设置正则表达式进行匹配允许访问的hosts

# Example
CORS_ORIGIN_REGEX_WHITELIST = [
    r"^https://\w+\.example\.com$",
]
  1. 如果有其他的需求外,可以在添加optional选项进行补充(非必选设置)

(1)如:当指允许hosts中的某些接口进行访问时候

# 默认是匹配所有:r'^.*$'
CORS_URLS_REGEX= r'^/api/.*$'				

(2)如:当只允许指定的方法(‘GET’,‘POST’)进行访问的时候:

# 默认方法有:'DELETE','GET','OPTIONS','PATCH','POST','PUT'
CORS_ALLOW_METHODS = [		
    'GET',
    'POST'
]

如果默认的方法不满足,需要自定义方法,可以在自己的项目中用下面的代码编写

from corsheaders.defaults import default_methods

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

(3)如:可以自定义允许访问的HEADERS

# 默认的CORS_ALLOW_HEADERS类表如下:
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',
]

还有很多其他的设置,可以自行查阅文档:

github~django-cors-headers

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值