diff --git a/rest_framework/compat.py b/rest_framework/compat.py index 5fad483911..4a11b8d4ce 100644 --- a/rest_framework/compat.py +++ b/rest_framework/compat.py @@ -189,6 +189,18 @@ def get_referenced_base_fields_from_q(q): } +if django.VERSION >= (6, 1): + # `split_header_value` was added in Django 6.2 (backported to 6.1b1+), + # replacing the `cc_delim_re` regular expression. + # https://github.com/django/django/commit/526b1b414d8e215bf627b5722df12a09346dbf6b + from django.utils.http import split_header_value +else: + + def split_header_value(value, sep=","): + for part in value.split(sep): + if stripped := part.strip(): + yield stripped + # `separators` argument to `json.dumps()` differs between 2.x and 3.x # See: https://bugs.python.org/issue22767 SHORT_SEPARATORS = (',', ':') diff --git a/rest_framework/views.py b/rest_framework/views.py index 327ebe9032..1439570d46 100644 --- a/rest_framework/views.py +++ b/rest_framework/views.py @@ -7,12 +7,13 @@ from django.db import connections, models from django.http import Http404 from django.http.response import HttpResponseBase -from django.utils.cache import cc_delim_re, patch_vary_headers +from django.utils.cache import patch_vary_headers from django.utils.encoding import smart_str from django.views.decorators.csrf import csrf_exempt from django.views.generic import View from rest_framework import exceptions, status +from rest_framework.compat import split_header_value from rest_framework.request import Request from rest_framework.response import Response from rest_framework.schemas import DefaultSchema @@ -444,7 +445,7 @@ def finalize_response(self, request, response, *args, **kwargs): # Add new vary headers to the response instead of overwriting. vary_headers = self.headers.pop('Vary', None) if vary_headers is not None: - patch_vary_headers(response, cc_delim_re.split(vary_headers)) + patch_vary_headers(response, split_header_value(vary_headers)) for key, value in self.headers.items(): response[key] = value