~ubuntu-branches/ubuntu/quantal/python-django/quantal-security

« back to all changes in this revision

Viewing changes to django/views/decorators/csrf.py

  • Committer: Bazaar Package Importer
  • Author(s): Chris Lamb
  • Date: 2010-05-21 07:52:55 UTC
  • mfrom: (1.3.6 upstream)
  • mto: This revision was merged to the branch mainline in revision 28.
  • Revision ID: james.westby@ubuntu.com-20100521075255-ii78v1dyfmyu3uzx
Tags: upstream-1.2
ImportĀ upstreamĀ versionĀ 1.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from django.middleware.csrf import CsrfViewMiddleware
 
2
from django.utils.decorators import decorator_from_middleware, available_attrs
 
3
 
 
4
try:
 
5
    from functools import wraps
 
6
except ImportError:
 
7
    from django.utils.functional import wraps  # Python 2.4 fallback.
 
8
 
 
9
csrf_protect = decorator_from_middleware(CsrfViewMiddleware)
 
10
csrf_protect.__name__ = "csrf_protect"
 
11
csrf_protect.__doc__ = """
 
12
This decorator adds CSRF protection in exactly the same way as
 
13
CsrfViewMiddleware, but it can be used on a per view basis.  Using both, or
 
14
using the decorator multiple times, is harmless and efficient.
 
15
"""
 
16
 
 
17
def csrf_response_exempt(view_func):
 
18
    """
 
19
    Modifies a view function so that its response is exempt
 
20
    from the post-processing of the CSRF middleware.
 
21
    """
 
22
    def wrapped_view(*args, **kwargs):
 
23
        resp = view_func(*args, **kwargs)
 
24
        resp.csrf_exempt = True
 
25
        return resp
 
26
    return wraps(view_func, assigned=available_attrs(view_func))(wrapped_view)
 
27
 
 
28
def csrf_view_exempt(view_func):
 
29
    """
 
30
    Marks a view function as being exempt from CSRF view protection.
 
31
    """
 
32
    # We could just do view_func.csrf_exempt = True, but decorators
 
33
    # are nicer if they don't have side-effects, so we return a new
 
34
    # function.
 
35
    def wrapped_view(*args, **kwargs):
 
36
        return view_func(*args, **kwargs)
 
37
    wrapped_view.csrf_exempt = True
 
38
    return wraps(view_func, assigned=available_attrs(view_func))(wrapped_view)
 
39
 
 
40
def csrf_exempt(view_func):
 
41
    """
 
42
    Marks a view function as being exempt from the CSRF checks
 
43
    and post processing.
 
44
 
 
45
    This is the same as using both the csrf_view_exempt and
 
46
    csrf_response_exempt decorators.
 
47
    """
 
48
    return csrf_response_exempt(csrf_view_exempt(view_func))