|
@@ -1,5 +1,7 @@
|
|
from functools import wraps
|
|
from functools import wraps
|
|
|
|
|
|
|
|
+from asgiref.sync import iscoroutinefunction
|
|
|
|
+
|
|
from django.middleware.csrf import CsrfViewMiddleware, get_token
|
|
from django.middleware.csrf import CsrfViewMiddleware, get_token
|
|
from django.utils.decorators import decorator_from_middleware
|
|
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
|
|
# view_func.csrf_exempt = True would also work, but decorators are nicer
|
|
# if they don't have side effects, so return a new function.
|
|
# 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)
|