在Django中使用CORS进行跨域资源共享
CORS全称是跨域资源共享,用于解决在客户端使用AJAX进行跨域请求时的安全限制问题。
在Django中,我们可以使用django-cors-headers库来实现CORS。
安装:
pip install django-cors-headers
在settings.py中添加中间件和配置:
MIDDLEWARE = [ # ... 'corsheaders.middleware.CorsMiddleware', # 添加中间件 'django.middleware.common.CommonMiddleware', # ... ] CORS_ORIGIN_ALLOW_ALL = True # 允许所有来源 CORS_ALLOW_CREDENTIALS = True # 允许携带cookie CORS_ORIGIN_WHITELIST = [ # 白名单,允许特定来源 'http://pidancode.com', ] CORS_ORIGIN_REGEX_WHITELIST = [ # 正则表达式白名单 r'^(https?://)?(\w+\.)?google\.com$', ] CORS_ALLOW_METHODS = [ # 允许的请求方法 'DELETE', 'GET', 'OPTIONS', 'PATCH', 'POST', 'PUT', ] CORS_ALLOW_HEADERS = [ # 允许的请求头 'accept', 'accept-encoding', 'authorization', 'cache-control', 'content-type', 'origin', 'referer', 'user-agent', ] CORS_PREFLIGHT_MAX_AGE = 86400 # OPTIONS请求缓存时间
代码演示:
views.py
from django.http import JsonResponse def index(request): data = {'message': 'Hello, CORS!'} return JsonResponse(data)
urls.py
from django.urls import path from . import views urlpatterns = [ path('index', views.index, name='index'), ]
以上代码会在/index路径下返回JSON格式的数据{'message': 'Hello, CORS!'}。
如果需要限制来源,可以使用CORS_ORIGIN_WHITELIST或CORS_ORIGIN_REGEX_WHITELIST。例如:
CORS_ORIGIN_WHITELIST = [ 'http://pidancode.com', ]
这样只允许来自http://pidancode.com的请求。如果需要同时允许多个来源,可以使用逗号分隔。
CORS_ORIGIN_WHITELIST = [ 'http://pidancode.com', 'http://example.com', ]
如果需要使用正则表达式匹配多个来源,可以使用CORS_ORIGIN_REGEX_WHITELIST。
CORS_ORIGIN_REGEX_WHITELIST = [ r'^(https?://)?(\w+\.)?google\.com$', r'^(https?://)?(\w+\.)?example\.com$', ]
这样只允许来自google.com和example.com的请求。
如果需要限制请求方法和请求头,可以使用CORS_ALLOW_METHODS和CORS_ALLOW_HEADERS。
CORS_ALLOW_METHODS = [ 'GET', 'POST', ] CORS_ALLOW_HEADERS = [ 'accept', 'content-type', ]
这样只允许GET和POST请求,并且只允许Content-Type和Accept请求头。
注意,如果使用cookie,请把CORS_ALLOW_CREDENTIALS设为True。
CORS_ALLOW_CREDENTIALS = True
这样可以携带cookie进行跨域请求。
最后,如果需要缓存OPTIONS请求的结果,可以使用CORS_PREFLIGHT_MAX_AGE设置缓存时间。
CORS_PREFLIGHT_MAX_AGE = 86400
相关文章