[4.2.x] Fixed #34328 -- Added async-only class-based middleware example.

Backport of ce8189eea0 from main
This commit is contained in:
Carlton Gibson 2023-02-14 14:06:42 +01:00
parent ac8cf0ae76
commit b7aab1fb3a
1 changed files with 19 additions and 0 deletions

View File

@ -371,6 +371,25 @@ Here's an example of how to create a middleware function that supports both::
Thus, even if you are wrapping an async view, you may be called in sync
mode if there is other, synchronous middleware between you and the view.
When using an asynchronous class-based middleware, you must ensure that
instances are correctly marked as coroutine functions::
from asgiref.sync import iscoroutinefunction, markcoroutinefunction
class AsyncMiddleware:
async_capable = True
sync_capable = False
def __init__(self, get_response):
self.get_response = get_response
if iscoroutinefunction(self.get_response):
markcoroutinefunction(self)
async def __call__(self, request):
response = await self.get_response(request)
# Some logic ...
return response
.. _upgrading-middleware:
Upgrading pre-Django 1.10-style middleware