📅  最后修改于: 2023-12-03 15:00:27.621000             🧑  作者: Mango
django-cors-headers
是Django应用程序,它是Django中的 CORS(跨来源资源共享)的实现。
CORS是Web应用程序中的一个安全性问题。它允许在一个域中运行的JS客户端访问来自另一个域的资源,所以这样的资源共享需要得到服务端的授权。在Django应用程序中,django-cors-headers可以帮助您轻松地实现CORS。
pip install django-cors-headers
在 settings.py
中的 INSTALLED_APPS
中添加 corsheaders
,如
INSTALLED_APPS = (
...
'corsheaders',
...
)
在 settings.py
中添加 MIDDLEWARE
选项,并将 CorsMiddleware
添加到此选项中。
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
]
添加 CORS_ORIGIN_ALLOW_ALL
和 CORS_ORIGIN_WHITELIST
选项。如果你想允许所有的资源访问API,则设置 CORS_ORIGIN_ALLOW_ALL = True
,或者将您希望访问您的API的域名添加到 CORS_ORIGIN_WHITELIST
中,如下所示:
CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = (
'https://example.com',
'https://www.example.com',
)
注意:建议使用 CORS_ORIGIN_WHITELIST
选项
django-cors-header 自带一个装饰器 @cross_origin
,通过将该装饰器应用到视图上,您可以允许通过 AJAX 访问您的 API。以APIView为例:
from django.views.generic import View
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
from corsheaders.decorators import cors_allowed_methods
@method_decorator(cors_allowed_methods(['GET', 'POST', 'PUT', 'DELETE']), name='dispatch')
@method_decorator(csrf_exempt, name='dispatch')
class MyView(View):
...
将 cors_allowed_methods
与视图的HTTP方法 (GET
, POST
, PUT
, DELETE
, etc.) 列表一起使用。如果不提供方法列表,则默认为 ['OPTIONS']
这里是一个 Django Rest Framework 视图集的示例,使用 @api_view
装饰器可以使用非DRF Views的基础视图。
from rest_framework.decorators import api_view
from rest_framework.response import Response
from corsheaders.decorators import cors_allowed_methods
@api_view(['GET'])
@cors_allowed_methods(['GET'])
def my_view(request):
data = {
'name': 'John Doe',
'age': 45,
'location': 'New York'
}
return Response(data)
使用 django-cors-headers
可以轻松实现 Django 应用程序中的越域访问。在应用程序中添加 CORS_ORIGIN_ALLOW_ALL
或 CORS_ORIGIN_WHITELIST
选项,以允许特定域名或所有域名访问API。使用装饰器 @cross_origin
将CORS功能应用到视图上,并在必要的时候指定HTTP方法。