При добавлении каналов в Django я получаю следующую ошибку.
Исключение внутри приложения: init () принимает 1 позиционный аргумент при добавлении ASGI_APPLICATION в Django 3.1 для каналов
Exception inside application: __init__() takes 1 positional argument but 2 were given
Traceback (most recent call last):
File "/home/dell/Desktop/s/s/s-env/lib/python3.6/site-packages/channels/staticfiles.py", line 44, in __call__
return await self.application(scope, receive, send)
File "/home/dell/Desktop/s/s/s-env/lib/python3.6/site-packages/channels/routing.py", line 71, in __call__
return await application(scope, receive, send)
File "/home/dell/Desktop/s/s/s-env/lib/python3.6/site-packages/channels/routing.py", line 160, in __call__
send,
File "/home/dell/Desktop/s/s/s-env/lib/python3.6/site-packages/asgiref/compatibility.py", line 33, in new_application
instance = application(scope)
TypeError: __init__() takes 1 positional argument but 2 were give
Приложение отлично работает с конфигурацией WSGI. Вышеупомянутая ошибка появляется только при добавлении ASGI_APPLICATION = 'app.routing.application'
.
Поскольку он показывает ошибку, происходящую из статических файлов, я снова попытался сгенерировать статические файлы, но это не помогло.
Я использую файл asgi django по умолчанию:
"""
ASGI config for mevsyou project.
It exposes the ASGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/3.0/howto/deployment/asgi/
"""
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 's.settings.local')
application = get_asgi_application()
s / routing.py:
from channels.routing import ProtocolTypeRouter, URLRouter
from users import routing
application = ProtocolTypeRouter({
'http': URLRouter(routing.urlpatterns),
})
__init__
дляapplication
с двумя параметрами:__init__(self, scope)
. - person Willem Van Onsem   schedule 19.11.2020asgi
, а файлapp.routing.application
. - person Willem Van Onsem   schedule 19.11.2020__init__(self, *args)
или__init__(self, *args, **kwargs)
, если хотите быть как можно более универсальным. - person Nadeem Douba   schedule 19.11.2020