Correct way to use async class based views in Django

会有一股神秘感。 提交于 2021-01-26 09:30:26

问题


I am trying to use the very new Django 3.1 Async view classes. Based on the limited documentation available, I have tried to create my own async def __call__() method. From the documents:

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

Django 3.1 Development Documents

However, until now I have had no luck with writing an asynchronous class based view. I constantly get await exceptions, or asyncio.iscoroutinefunction returns False, which I assume should return true if the class is actually Asynchronous.

Since the documentation is lacking an example, could someone with more knowledge of async programming help me with an example of a class based asynchronous view?


回答1:


Spend quite some time searching in the Django ticket system, blogposts (thx to Joren), etc. so you don't have to.

The best you can do is using the code from the 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):
    ...

But you also need to be aware there is no way you can use actual generics (no async ORM support, even TemplateView doesn't work) and build-in decorators for 3.1. You need to write your own stuff for things that Django normally does itself.



来源:https://stackoverflow.com/questions/62038200/correct-way-to-use-async-class-based-views-in-django

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!