如何使用 Django 中间件来处理跨域资源共享(CORS)?

2023-04-11 00:00:00 中间件 如何使用 资源共享

Django中的中间件可以用于访问请求和响应对象,以及在这两者之间执行操作。可以使用中间件来处理CORS,以便允许不同域名的前端应用程序访问后端API。

以下是如何使用Django中间件来处理CORS的步骤:

  1. 首先,我们需要安装Django-cors-headers库。可以使用以下命令来安装:
pip install django-cors-headers
  1. 在Django项目的settings.py文件中,添加以下内容:
INSTALLED_APPS = (
    # 其他应用
    'corsheaders',
)

MIDDLEWARE = [
    # 其他中间件
    'corsheaders.middleware.CorsMiddleware',
]
  1. 在settings.py文件中,添加以下内容来配置CORS(例如允许所有域名访问):
CORS_ORIGIN_ALLOW_ALL = True

如果你想只允许特定的域名访问,则替换为以下代码(例如,允许访问pidancode.com和皮蛋编程):

CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = (
     'pidancode.com',
     '皮蛋编程',
)
  1. 保存设置并启动Django服务器。现在,可以从任何域名发送API请求并获得正确的响应。

这里再给出一个完整的中间件示例代码:

from django.utils.deprecation import MiddlewareMixin
from django.http import HttpResponse


class CORSMiddleware(MiddlewareMixin):

    def process_request(self, request):
        self.is_valid_request(request)

        return None

    def process_response(self, request, response):
        response['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS, PUT, DELETE'
        response['Access-Control-Allow-Origin'] = '*'
        response['Access-Control-Allow-Headers'] = 'Origin, Content-Type, Authorization'
        return response

    @staticmethod
    def is_valid_request(request):
        if request.method == "OPTIONS":
            response = HttpResponse()
            response["Access-Control-Allow-Origin"] = "*"
            response["Access-Control-Allow-Methods"] = "DELETE, POST, GET, OPTIONS, PATCH"
            response["Access-Control-Allow-Headers"] = "Content-Type, Authorization"
            return response

可以将该中间件添加到MIDDLEWARE的末尾,它会在执行视图函数之前检查每个请求,以确保请求来自有效源,然后基于响应携带CORS头以表明请求的有效性。

希望这个代码示例能够帮助您理解如何在Django中使用中间件来处理CORS。

相关文章