官方文檔:https://pypi.org/project/djan...數據庫
pip install django-cors-headers
settings.py
文件配置INSTALLED_APPS = [ ... 'corsheaders' , ... ]
MIDDLEWARE = [ ... 'corsheaders.middleware.CorsMiddleware' , # 註冊中間件 'django.middleware.common.CommonMiddleware' , ... ]
# 容許所有來源 CORS_ORIGIN_ALLOW_ALL = True # 若是爲True,將不使用白名單,而且將接受全部來源。默認爲False。 # 白名單 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$", ]
以上的配置基本已經足夠,如下爲可選配置。django
# 默認爲 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 = [ ''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', ]
場景:須要將白名單中容許的地址設置爲動態可配置的,好比就是數據庫中的一張表,可在後臺添加或者刪除可容許的地址,此時可用到corsheaders.signals
模塊中的check_request_enabled
來解決。app
# myapp/handlers.py from corsheaders.signals import check_request_enabled from myapp.models import MySite def cors_allow_mysites(sender, request, **kwargs): return MySite.objects.filter(host=request.host).exists() check_request_enabled.connect(cors_allow_mysites)
# myapp/__init__.py default_app_config = 'myapp.apps.MyAppConfig'
# myapp/apps.py from django.apps import AppConfig class MyAppConfig(AppConfig): name = 'myapp' def ready(self): # Makes sure all signal handlers are connected from myapp import handlers # noqa