2010-12-27 21:27:26 +08:00
|
|
|
===============
|
2011-01-03 21:29:17 +08:00
|
|
|
View decorators
|
2010-12-27 21:27:26 +08:00
|
|
|
===============
|
|
|
|
|
2011-02-28 13:25:46 +08:00
|
|
|
.. module:: django.views.decorators.http
|
2010-12-27 21:27:26 +08:00
|
|
|
|
|
|
|
Django provides several decorators that can be applied to views to support
|
|
|
|
various HTTP features.
|
|
|
|
|
2019-03-11 18:17:50 +08:00
|
|
|
See :ref:`decorating-class-based-views` for how to use these decorators with
|
|
|
|
class-based views.
|
|
|
|
|
2011-01-03 21:29:17 +08:00
|
|
|
Allowed HTTP methods
|
2010-12-27 21:27:26 +08:00
|
|
|
====================
|
|
|
|
|
2011-04-28 21:04:16 +08:00
|
|
|
The decorators in :mod:`django.views.decorators.http` can be used to restrict
|
2011-05-02 04:08:55 +08:00
|
|
|
access to views based on the request method. These decorators will return
|
|
|
|
a :class:`django.http.HttpResponseNotAllowed` if the conditions are not met.
|
2011-02-28 13:25:46 +08:00
|
|
|
|
2010-12-27 21:27:26 +08:00
|
|
|
.. function:: require_http_methods(request_method_list)
|
|
|
|
|
2015-05-24 21:30:51 +08:00
|
|
|
Decorator to require that a view only accepts particular request
|
2011-04-28 21:04:16 +08:00
|
|
|
methods. Usage::
|
2010-12-27 21:27:26 +08:00
|
|
|
|
2011-04-28 21:04:16 +08:00
|
|
|
from django.views.decorators.http import require_http_methods
|
2011-02-28 13:25:46 +08:00
|
|
|
|
2011-04-28 21:04:16 +08:00
|
|
|
@require_http_methods(["GET", "POST"])
|
|
|
|
def my_view(request):
|
|
|
|
# I can assume now that only GET or POST requests make it this far
|
|
|
|
# ...
|
|
|
|
pass
|
2010-12-27 21:27:26 +08:00
|
|
|
|
2011-04-28 21:04:16 +08:00
|
|
|
Note that request methods should be in uppercase.
|
2010-12-27 21:27:26 +08:00
|
|
|
|
|
|
|
.. function:: require_GET()
|
|
|
|
|
2015-05-24 21:30:51 +08:00
|
|
|
Decorator to require that a view only accepts the GET method.
|
2010-12-27 21:27:26 +08:00
|
|
|
|
|
|
|
.. function:: require_POST()
|
|
|
|
|
2015-05-24 21:30:51 +08:00
|
|
|
Decorator to require that a view only accepts the POST method.
|
2011-04-28 21:04:16 +08:00
|
|
|
|
|
|
|
.. function:: require_safe()
|
|
|
|
|
2015-05-24 21:30:51 +08:00
|
|
|
Decorator to require that a view only accepts the GET and HEAD methods.
|
2011-04-28 21:04:16 +08:00
|
|
|
These methods are commonly considered "safe" because they should not have
|
|
|
|
the significance of taking an action other than retrieving the requested
|
|
|
|
resource.
|
|
|
|
|
|
|
|
.. note::
|
2016-05-11 23:08:08 +08:00
|
|
|
Web servers should automatically strip the content of responses to HEAD
|
2011-04-28 21:04:16 +08:00
|
|
|
requests while leaving the headers unchanged, so you may handle HEAD
|
|
|
|
requests exactly like GET requests in your views. Since some software,
|
|
|
|
such as link checkers, rely on HEAD requests, you might prefer
|
|
|
|
using ``require_safe`` instead of ``require_GET``.
|
2010-12-27 21:27:26 +08:00
|
|
|
|
|
|
|
Conditional view processing
|
|
|
|
===========================
|
|
|
|
|
2011-02-28 13:25:46 +08:00
|
|
|
The following decorators in :mod:`django.views.decorators.http` can be used to
|
|
|
|
control caching behavior on particular views.
|
|
|
|
|
2010-12-27 21:27:26 +08:00
|
|
|
.. function:: condition(etag_func=None, last_modified_func=None)
|
|
|
|
|
|
|
|
.. function:: etag(etag_func)
|
|
|
|
|
|
|
|
.. function:: last_modified(last_modified_func)
|
|
|
|
|
2011-04-28 21:04:16 +08:00
|
|
|
These decorators can be used to generate ``ETag`` and ``Last-Modified``
|
|
|
|
headers; see
|
|
|
|
:doc:`conditional view processing </topics/conditional-view-processing>`.
|
2010-12-27 21:27:26 +08:00
|
|
|
|
2011-02-28 13:25:46 +08:00
|
|
|
.. module:: django.views.decorators.gzip
|
2010-12-27 21:27:26 +08:00
|
|
|
|
2011-01-03 21:29:17 +08:00
|
|
|
GZip compression
|
2010-12-27 21:27:26 +08:00
|
|
|
================
|
|
|
|
|
2011-02-28 13:25:46 +08:00
|
|
|
The decorators in :mod:`django.views.decorators.gzip` control content
|
|
|
|
compression on a per-view basis.
|
|
|
|
|
2010-12-27 21:27:26 +08:00
|
|
|
.. function:: gzip_page()
|
|
|
|
|
2011-04-28 21:04:16 +08:00
|
|
|
This decorator compresses content if the browser allows gzip compression.
|
|
|
|
It sets the ``Vary`` header accordingly, so that caches will base their
|
|
|
|
storage on the ``Accept-Encoding`` header.
|
2010-12-27 21:27:26 +08:00
|
|
|
|
2011-02-28 13:25:46 +08:00
|
|
|
.. module:: django.views.decorators.vary
|
2010-12-27 21:27:26 +08:00
|
|
|
|
2011-01-03 21:29:17 +08:00
|
|
|
Vary headers
|
2010-12-27 21:27:26 +08:00
|
|
|
============
|
|
|
|
|
2011-02-28 13:25:46 +08:00
|
|
|
The decorators in :mod:`django.views.decorators.vary` can be used to control
|
|
|
|
caching based on specific request headers.
|
2010-12-27 21:27:26 +08:00
|
|
|
|
|
|
|
.. function:: vary_on_cookie(func)
|
|
|
|
|
|
|
|
.. function:: vary_on_headers(*headers)
|
|
|
|
|
2011-04-28 21:04:16 +08:00
|
|
|
The ``Vary`` header defines which request headers a cache mechanism should take
|
|
|
|
into account when building its cache key.
|
2011-02-28 13:25:46 +08:00
|
|
|
|
2011-04-28 21:04:16 +08:00
|
|
|
See :ref:`using vary headers <using-vary-headers>`.
|
2015-04-28 05:56:02 +08:00
|
|
|
|
|
|
|
.. module:: django.views.decorators.cache
|
|
|
|
|
|
|
|
Caching
|
|
|
|
=======
|
|
|
|
|
|
|
|
The decorators in :mod:`django.views.decorators.cache` control server and
|
|
|
|
client-side caching.
|
|
|
|
|
2016-08-11 19:05:16 +08:00
|
|
|
.. function:: cache_control(**kwargs)
|
|
|
|
|
|
|
|
This decorator patches the response's ``Cache-Control`` header by adding
|
|
|
|
all of the keyword arguments to it. See
|
|
|
|
:func:`~django.utils.cache.patch_cache_control` for the details of the
|
|
|
|
transformation.
|
|
|
|
|
2015-04-28 05:56:02 +08:00
|
|
|
.. function:: never_cache(view_func)
|
|
|
|
|
|
|
|
This decorator adds a ``Cache-Control: max-age=0, no-cache, no-store,
|
2019-06-25 14:15:00 +08:00
|
|
|
must-revalidate, private`` header to a response to indicate that a page
|
|
|
|
should never be cached.
|
2020-10-20 15:14:48 +08:00
|
|
|
|
|
|
|
.. module:: django.views.decorators.common
|
|
|
|
|
|
|
|
Common
|
|
|
|
======
|
|
|
|
|
|
|
|
.. versionadded:: 3.2
|
|
|
|
|
|
|
|
The decorators in :mod:`django.views.decorators.common` allow per-view
|
|
|
|
customization of :class:`~django.middleware.common.CommonMiddleware` behavior.
|
|
|
|
|
|
|
|
.. function:: no_append_slash()
|
|
|
|
|
|
|
|
This decorator allows individual views to be excluded from
|
|
|
|
:setting:`APPEND_SLASH` URL normalization.
|