Estoy tratando de usar las nuevas clases de vista Django 3.1 Async. Según la documentación limitada disponible, he intentado crear mi propio método async def __call__() . De los documentos:
Para una vista basada en clases, esto significa hacer que su
__call__()unaasync def(no su__init__()oas_view()).
Documentos de desarrollo de Django 3.1
Sin embargo, hasta ahora no he tenido suerte escribiendo una vista basada en clases asincrónicas. Constantemente obtengo excepciones en await , o asyncio.iscoroutinefunction devuelve False , que supongo que debería devolver verdadero si la clase es realmente asíncrona.
Dado que la documentación carece de un ejemplo, ¿podría alguien con más conocimientos de programación asíncrona ayudarme con un ejemplo de una vista asíncrona basada en clases?
Dedique bastante tiempo a buscar en el sistema de tickets de Django, publicaciones de blog (gracias a Joren), etc. para que no tenga que hacerlo.
Lo mejor que puedes hacer es usar el código del blog :
class YourView(View): @classonlymethod def as_view(cls, **initkwargs): view = super().as_view(**initkwargs) view._is_coroutine = asyncio.coroutines._is_coroutine return view async def get(self, *args, **kwargs): ...Pero también debe tener en cuenta que no hay forma de que pueda usar genéricos reales (sin compatibilidad con ORM asíncrono, incluso TemplateView no funciona) y decoradores integrados para 3.1. Necesita escribir sus propias cosas para las cosas que Django normalmente hace por sí mismo.