Skip to content

Commit da205be

Browse files
committed
add new django utils code exmaples
1 parent 3f18b98 commit da205be

File tree

96 files changed

+24004
-77
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+24004
-77
lines changed
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
title: django.utils.cache add_never_cache_headers Example Code
2+
category: page
3+
slug: django-utils-cache-add-never-cache-headers-examples
4+
sortorder: 500011424
5+
toc: False
6+
sidebartitle: django.utils.cache add_never_cache_headers
7+
meta: Python example code for the add_never_cache_headers callable from the django.utils.cache module of the Django project.
8+
9+
10+
add_never_cache_headers is a callable within the django.utils.cache module of the Django project.
11+
12+
13+
## Example 1 from django-cms
14+
[django-cms](https://github.com/divio/django-cms)
15+
([project website](https://www.django-cms.org/en/)) is a Python-based
16+
content management system (CMS) [library](https://pypi.org/project/django-cms/)
17+
for use with Django web apps that is open sourced under the
18+
[BSD 3-Clause "New"](https://github.com/divio/django-cms/blob/develop/LICENSE)
19+
license.
20+
21+
[**django-cms / cms / middleware / toolbar.py**](https://github.com/divio/django-cms/blob/develop/cms/middleware/toolbar.py)
22+
23+
```python
24+
# toolbar.py
25+
from django import forms
26+
from django.contrib.admin.models import LogEntry, ADDITION, CHANGE
27+
from django.core.exceptions import ValidationError
28+
from django.urls import resolve
29+
30+
from cms.toolbar.toolbar import CMSToolbar
31+
from cms.toolbar.utils import get_toolbar_from_request
32+
from cms.utils.conf import get_cms_setting
33+
from cms.utils.compat.dj import MiddlewareMixin
34+
from cms.utils.request_ip_resolvers import get_request_ip_resolver
35+
36+
37+
get_request_ip = get_request_ip_resolver()
38+
39+
40+
class ToolbarMiddleware(MiddlewareMixin):
41+
42+
def is_cms_request(self, request):
43+
toolbar_hide = get_cms_setting('TOOLBAR_HIDE')
44+
internal_ips = get_cms_setting('INTERNAL_IPS')
45+
46+
if internal_ips:
47+
client_ip = get_request_ip(request)
48+
try:
49+
client_ip = forms.GenericIPAddressField().clean(client_ip)
50+
except ValidationError:
51+
return False
52+
else:
53+
if client_ip not in internal_ips:
54+
return False
55+
56+
if not toolbar_hide:
57+
return True
58+
59+
try:
60+
61+
62+
## ... source file abbreviated to get to add_never_cache_headers examples ...
63+
64+
65+
66+
if edit_enabled and show_toolbar and not request.session.get('cms_edit'):
67+
request.session['cms_edit'] = True
68+
request.session['cms_preview'] = False
69+
70+
if edit_disabled or not show_toolbar and request.session.get('cms_edit'):
71+
request.session['cms_edit'] = False
72+
73+
if 'preview' in request.GET and not request.session.get('cms_preview'):
74+
request.session['cms_preview'] = True
75+
76+
if request.user.is_staff:
77+
try:
78+
request.cms_latest_entry = LogEntry.objects.filter(
79+
user=request.user,
80+
action_flag__in=(ADDITION, CHANGE)
81+
).only('pk').order_by('-pk')[0].pk
82+
except IndexError:
83+
request.cms_latest_entry = -1
84+
request.toolbar = CMSToolbar(request)
85+
86+
def process_response(self, request, response):
87+
if not self.is_cms_request(request):
88+
return response
89+
90+
~~ from django.utils.cache import add_never_cache_headers
91+
92+
toolbar = get_toolbar_from_request(request)
93+
94+
if toolbar._cache_disabled:
95+
~~ add_never_cache_headers(response)
96+
97+
if hasattr(request, 'user') and request.user.is_staff and response.status_code != 500:
98+
try:
99+
if hasattr(request, 'cms_latest_entry'):
100+
pk = LogEntry.objects.filter(
101+
user=request.user,
102+
action_flag__in=(ADDITION, CHANGE)
103+
).only('pk').order_by('-pk')[0].pk
104+
105+
if request.cms_latest_entry != pk:
106+
request.session['cms_log_latest'] = pk
107+
except IndexError:
108+
pass
109+
return response
110+
111+
112+
113+
## ... source file continues with no further add_never_cache_headers examples...
114+
115+
```
116+
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
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

Comments
 (0)