I follow the instruction posted here
Django has support for writing asynchronous (“async”) views, along with an entirely async-enabled request stack if you are running under ASGI. Async views will still work under WSGI, but with performance penalties, and without the ability to have efficient long-running requests.
I have started the application using dyphne and define it in settings.py
INSTALLED_APPS = [
'daphne',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'chat',
'oauth',
'corsheaders',
'rest_framework',
]
ASGI_APPLICATION = 'sample.asgi.application'
and wrap my views with async def with something like
@api_view(['GET', 'POST'])
@authentication_classes([SessionAuthentication])
@permission_classes([IsAuthenticated])
async def sessions(request):
if request.method == 'GET':
user = request.user
sessions = [session async for session in Session.objects.filter(user=user)]
return JsonResponse(SessionSerializer(sessions,many=True).data, safe=False)
elif request.method == 'POST':
user = request.user
session = await Session.objects.acreate(name='new session', user=user)
return JsonResponse(SessionSerializer(session).data)
I have set everything up and it shows it runs under asgi correctly
Starting ASGI/Daphne version 4.0.0 development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
HTTP/2 support not enabled (install the http2 and tls Twisted extras)
But It just panics with
AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'coroutine'>`
Do i miss something to be configured here?