django decorators

Dec 10, 2023    |   

Exmaple usage:

from django.views.decorators.http import require_http_methods

@require_http_methods(["GET", "POST"])
def my_view(request):
    # I can assume now that only GET or POST requests make it this far
    # ...
    pass

Django decorators:

Allowed HTTP methods

The decorators in django.views.decorators.http can be used to restrict access to views based on the request method. These decorators will return a django.http.HttpResponseNotAllowed if the conditions are not met.

@require_http_methods(request_method_list)

@require_GET()

@require_POST()

@require_safe()

Decorator to require that a view only accepts the GET and HEAD methods.

Conditional view processing

The following decorators in django.views.decorators.http can be used to control caching behavior on particular views.

@condition(etag_func=None, last_modified_func=None)

@etag(etag_func)

@last_modified(last_modified_func)

These decorators can be used to generate ETag and Last-Modified headers.

GZip compression

The decorators in django.views.decorators.gzip control content compression on a per-view basis.

@gzip_page()

Vary headers

The decorators in django.views.decorators.vary can be used to control caching based on specific request headers.

@vary_on_cookie(func)

@vary_on_headers(*headers)

The Vary header defines which request headers a cache mechanism should take into account when building its cache key.

Caching

The decorators in django.views.decorators.cache control server and client-side caching.

@cache_control(**kwargs)

This decorator patches the response’s Cache-Control header by adding all of the keyword arguments to it. 


@never_cache(view_func)

This decorator adds a Cache-Control: max-age=0, no-cache, no-store, must-revalidate, private header to a response to indicate that a page should never be cached.


Common

The decorators in django.views.decorators.common allow per-view customization of CommonMiddleware behavior.

@no_append_slash()

This decorator allows individual views to be excluded from APPEND_SLASH URL normalization.

 

Auth

Decorators from django.contrib.auth.decorators allowing control access of resources.

@login_required