django-cors-headers官方文档:https://pypi.org/project/djan...需要支持Python3.5-3.8支持Django1.11-3.0安装pipinstalldjango-cors-headers在项目的settings.py文件中配置注册应用INSTALLED_APPS=[...'corsheaders',...]注册中间件MIDDLEWARE=[...'corsheaders.middleware.CorsMiddleware',#注册中间件'django.中间件。common.CommonMiddleware',...]Setallowedorigins#AllowalloriginsCORS_ORIGIN_ALLOW_ALL=True#如果为True,将不使用白名单,所有来源都将被接受。默认值为假。#白名单CORS_ORIGIN_WHITELIST=["https://example.com","https://sub.example.com","http://localhost:8080","http://127.0.0.1:9000"]#白名单也可以使用正则CORS_ORIGIN_REGEX_WHITELIST=[r"^https://\w+\.example\.com$",]以上配置基本够用,下面是可选配置。实际请求允许的HTTP方法列表#默认为CORS_ALLOW_METHODS=['DELETE','GET','OPTIONS','PATCH','POST','PUT',]#当有自定义方法时,可以使用下面的配置extendsfromcorsheaders.defaultsimportdefault_methodsCORS_ALLOW_METHODS=list(default_methods)+['POKE',]实际请求时可以使用的非标准HTTPheaders列表#默认是CORS_ALLOW_HEADERS=[''accept','accept-encoding','authorization','content-type','dnt','origin','user-agent','x-csrftoken','x-requested-with',]#也可以自定义扩展fromcorsheaders.defaultsimportdefault_headersCORS_ALLOW_HEADERS=list(default_headers)+['my-custom-header',]信号使用场景:需要将白名单中允许的地址设置为动态可配置的,比如一个表在数据库中,可以在后台添加或者删除允许的地址,可以通过checking_reques来解决corsheaders.signals模块中的t_enabled。#myapp/handlers.pyfromcorsheaders.signalsimportcheck_request_enabledfrommyapp.models导入MySitedefcors_allow_mysites(sender,request,**kwargs):returnMySite.objects.filter(host=request.host).exists()check_request_enabled.connect(cors_allow_mysites)#myapp/__init__.pydefault_app_config='myapp.apps.MyAppConfig'#myapp/apps.pyfromdjango.appsimportAppConfigclassMyAppConfig(AppConfig):name='myapp'defready(self):#确保所有信号处理程序都已连接myapp导入处理程序#noqa
