#33611: Allow View subclasses to define async method handlers.
------------------------------------+--------------------------------------
     Reporter:  Carlton Gibson      |                    Owner:  nobody
         Type:  New feature         |                   Status:  assigned
    Component:  Generic views       |                  Version:  4.0
     Severity:  Normal              |               Resolution:
     Keywords:  async, asgi, views  |             Triage Stage:  Unreviewed
    Has patch:  1                   |      Needs documentation:  0
  Needs tests:  0                   |  Patch needs improvement:  0
Easy pickings:  0                   |                    UI/UX:  0
------------------------------------+--------------------------------------
Description changed by Carlton Gibson:

Old description:

> The current [https://docs.djangoproject.com/en/4.0/topics/async/#async-
> views topic docs for Async views] say this about class-based views:
>
> > For a class-based view, this means making its __call__() method an
> async def (not its __init__() or as_view()).
>
> This isn't really appropriate for Django's class-based views:
>
> * We don't implement `__call__()`, rather going via `as_view() — for a
> per-request instance — and then `dispatch()`.
> * Users expect to implement the HTTP method handlers — `get`, `post`, and
> so on — rather than these ''more internal'' bits.
>
> Ideally we'd allow specifying `async def` at the method handler level, to
> allow using `await` in the handler, and writing views such as this:
>
> {{{
>     import asyncio
>     from django.http import HttpResponse
>     from django.views import View
>
>     class AsyncView(View):
>         async def get(self, request, *args, **kwargs):
>             # Perform io-blocking view-logic using await, sleep for
> example.
>             await asyncio.sleep(1)
>             return HttpResponse("Hello async world!")
> }}}

New description:

 The current [https://docs.djangoproject.com/en/4.0/topics/async/#async-
 views topic docs for Async views] say this about class-based views:

 > For a class-based view, this means making its `__call__()` method an
 async def (not its `__init__()` or `as_view()`).

 This isn't really appropriate for Django's class-based views:

 * We don't implement `__call__()`, rather going via `as_view()` — for a
 per-request instance — and then `dispatch()`.
 * Users expect to implement the HTTP method handlers — `get()`, `post()`,
 and so on — rather than these ''more internal'' bits.

 Ideally we'd allow specifying `async def` at the method handler level, to
 allow using `await` in the handler, and writing views such as this:

 {{{
     import asyncio
     from django.http import HttpResponse
     from django.views import View

     class AsyncView(View):
         async def get(self, request, *args, **kwargs):
             # Perform io-blocking view-logic using await, sleep for
 example.
             await asyncio.sleep(1)
             return HttpResponse("Hello async world!")
 }}}

--

-- 
Ticket URL: <https://code.djangoproject.com/ticket/33611#comment:3>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/0107017fdecfd641-b3877524-350f-47c5-9e85-6b20cf059bc1-000000%40eu-central-1.amazonses.com.

Reply via email to