Fixed #34328 -- Added async-only class-based middleware example.

This commit is contained in:
Carlton Gibson 2023-02-14 14:06:42 +01:00 committed by GitHub
parent c5808470aa
commit ce8189eea0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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