diff options
| author | Ben Lomax <lomax.on.the.run@gmail.com> | 2023-07-08 21:00:42 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-07-10 07:55:02 +0200 |
| commit | 953f81e078fb7299b6d40d4e599e5f559e03952b (patch) | |
| tree | 66cafa352d883e72240a188b1f27ea22d4d79d03 /django | |
| parent | 6d427288e410e9cad39b1aa1b4d4893fbd391282 (diff) | |
Refs #31949 -- Made @csrf_exempt decorator to work with async functions.
Diffstat (limited to 'django')
| -rw-r--r-- | django/views/decorators/csrf.py | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/django/views/decorators/csrf.py b/django/views/decorators/csrf.py index 92771c56df..4b8b8804b0 100644 --- a/django/views/decorators/csrf.py +++ b/django/views/decorators/csrf.py @@ -1,5 +1,7 @@ from functools import wraps +from asgiref.sync import iscoroutinefunction + from django.middleware.csrf import CsrfViewMiddleware, get_token from django.utils.decorators import decorator_from_middleware @@ -51,9 +53,17 @@ def csrf_exempt(view_func): # view_func.csrf_exempt = True would also work, but decorators are nicer # if they don't have side effects, so return a new function. - @wraps(view_func) - def wrapper_view(*args, **kwargs): - return view_func(*args, **kwargs) - wrapper_view.csrf_exempt = True - return wrapper_view + if iscoroutinefunction(view_func): + + async def _view_wrapper(request, *args, **kwargs): + return await view_func(request, *args, **kwargs) + + else: + + def _view_wrapper(request, *args, **kwargs): + return view_func(request, *args, **kwargs) + + _view_wrapper.csrf_exempt = True + + return wraps(view_func)(_view_wrapper) |
