官方文件:pypi.org/project/django-cors-heade...
要求
- 支援Python 3.5 - 3.8
- 支援Django 1.11 - 3.0
安裝
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$",
]
以上的配置基本已經足夠,以下為可選配置。
- 實際請求所允許的HTTP方式列表
# 預設為
CORS_ALLOW_METHODS = [
'DELETE' ,
'GET' ,
'OPTIONS' ,
'PATCH' ,
'POST' ,
'PUT' ,
]
# 當有自定義的方式時,可使用以下配置擴充套件
from corsheaders.defaults import default_methods
CORS_ALLOW_METHODS = list(default_methods) + [
'POKE',
]
- 實際請求時可以使用的非標準HTTP header 的列表
# 預設為
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
來解決。
# 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
本作品採用《CC 協議》,轉載必須註明作者和本文連結