|
| 1 | +title: django.utils.cache cc_delim_re Example Code |
| 2 | +category: page |
| 3 | +slug: django-utils-cache-cc-delim-re-examples |
| 4 | +sortorder: 500011425 |
| 5 | +toc: False |
| 6 | +sidebartitle: django.utils.cache cc_delim_re |
| 7 | +meta: Python example code for the cc_delim_re callable from the django.utils.cache module of the Django project. |
| 8 | + |
| 9 | + |
| 10 | +cc_delim_re is a callable within the django.utils.cache module of the Django project. |
| 11 | + |
| 12 | + |
| 13 | +## Example 1 from django-rest-framework |
| 14 | +[Django REST Framework](https://github.com/encode/django-rest-framework) |
| 15 | +([project homepage and documentation](https://www.django-rest-framework.org/), |
| 16 | +[PyPI package information](https://pypi.org/project/djangorestframework/) |
| 17 | +and [more resources on Full Stack Python](/django-rest-framework-drf.html)), |
| 18 | +often abbreviated as "DRF", is a popular [Django](/django.html) extension |
| 19 | +for building [web APIs](/application-programming-interfaces.html). |
| 20 | +The project has fantastic documentation and a wonderful |
| 21 | +[quickstart](https://www.django-rest-framework.org/tutorial/quickstart/) |
| 22 | +that serve as examples of how to make it easier for newcomers |
| 23 | +to get started. |
| 24 | + |
| 25 | +The project is open sourced under the |
| 26 | +[Encode OSS Ltd. license](https://github.com/encode/django-rest-framework/blob/master/LICENSE.md). |
| 27 | + |
| 28 | +[**django-rest-framework / rest_framework / views.py**](https://github.com/encode/django-rest-framework/blob/master/rest_framework/./views.py) |
| 29 | + |
| 30 | +```python |
| 31 | +# views.py |
| 32 | +from django.conf import settings |
| 33 | +from django.core.exceptions import PermissionDenied |
| 34 | +from django.db import connection, models, transaction |
| 35 | +from django.http import Http404 |
| 36 | +from django.http.response import HttpResponseBase |
| 37 | +~~from django.utils.cache import cc_delim_re, patch_vary_headers |
| 38 | +from django.utils.encoding import smart_str |
| 39 | +from django.views.decorators.csrf import csrf_exempt |
| 40 | +from django.views.generic import View |
| 41 | + |
| 42 | +from rest_framework import exceptions, status |
| 43 | +from rest_framework.request import Request |
| 44 | +from rest_framework.response import Response |
| 45 | +from rest_framework.schemas import DefaultSchema |
| 46 | +from rest_framework.settings import api_settings |
| 47 | +from rest_framework.utils import formatting |
| 48 | + |
| 49 | + |
| 50 | +def get_view_name(view): |
| 51 | + name = getattr(view, 'name', None) |
| 52 | + if name is not None: |
| 53 | + return name |
| 54 | + |
| 55 | + name = view.__class__.__name__ |
| 56 | + name = formatting.remove_trailing_string(name, 'View') |
| 57 | + name = formatting.remove_trailing_string(name, 'ViewSet') |
| 58 | + name = formatting.camelcase_to_spaces(name) |
| 59 | + |
| 60 | + suffix = getattr(view, 'suffix', None) |
| 61 | + if suffix: |
| 62 | + |
| 63 | + |
| 64 | +## ... source file abbreviated to get to cc_delim_re examples ... |
| 65 | + |
| 66 | + |
| 67 | + version, scheme = self.determine_version(request, *args, **kwargs) |
| 68 | + request.version, request.versioning_scheme = version, scheme |
| 69 | + |
| 70 | + self.perform_authentication(request) |
| 71 | + self.check_permissions(request) |
| 72 | + self.check_throttles(request) |
| 73 | + |
| 74 | + def finalize_response(self, request, response, *args, **kwargs): |
| 75 | + assert isinstance(response, HttpResponseBase), ( |
| 76 | + 'Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` ' |
| 77 | + 'to be returned from the view, but received a `%s`' |
| 78 | + % type(response) |
| 79 | + ) |
| 80 | + |
| 81 | + if isinstance(response, Response): |
| 82 | + if not getattr(request, 'accepted_renderer', None): |
| 83 | + neg = self.perform_content_negotiation(request, force=True) |
| 84 | + request.accepted_renderer, request.accepted_media_type = neg |
| 85 | + |
| 86 | + response.accepted_renderer = request.accepted_renderer |
| 87 | + response.accepted_media_type = request.accepted_media_type |
| 88 | + response.renderer_context = self.get_renderer_context() |
| 89 | + |
| 90 | + vary_headers = self.headers.pop('Vary', None) |
| 91 | + if vary_headers is not None: |
| 92 | +~~ patch_vary_headers(response, cc_delim_re.split(vary_headers)) |
| 93 | + |
| 94 | + for key, value in self.headers.items(): |
| 95 | + response[key] = value |
| 96 | + |
| 97 | + return response |
| 98 | + |
| 99 | + def handle_exception(self, exc): |
| 100 | + if isinstance(exc, (exceptions.NotAuthenticated, |
| 101 | + exceptions.AuthenticationFailed)): |
| 102 | + auth_header = self.get_authenticate_header(self.request) |
| 103 | + |
| 104 | + if auth_header: |
| 105 | + exc.auth_header = auth_header |
| 106 | + else: |
| 107 | + exc.status_code = status.HTTP_403_FORBIDDEN |
| 108 | + |
| 109 | + exception_handler = self.get_exception_handler() |
| 110 | + |
| 111 | + context = self.get_exception_handler_context() |
| 112 | + response = exception_handler(exc, context) |
| 113 | + |
| 114 | + if response is None: |
| 115 | + self.raise_uncaught_exception(exc) |
| 116 | + |
| 117 | + |
| 118 | + |
| 119 | +## ... source file continues with no further cc_delim_re examples... |
| 120 | + |
| 121 | +``` |
| 122 | + |
0 commit comments