Есть ли способ включить безопасные веб-сокеты в Django?

Я не могу использовать защищенные веб-сокеты на Django с включенным sll. Я использую пакет sslserver для Django, чтобы разрешить HTTPS на сервере разработки. Моя цель - сделать безопасный чат.

Вот конфигурация :

INSTALLED_APPS = [
    'channels',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'sslserver',
    'accounts',
    'chat',
]

#WSGI_APPLICATION = 'sendapp.wsgi.application'
ASGI_APPLICATION = 'sendapp.asgi.application'

# LEARN CHANNELS
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels.layers.InMemoryChannelLayer"
    },
}

По поводу файла asgi :

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'sendapp.settings')

application = ProtocolTypeRouter({
  'https': get_asgi_application(),
  'websocket': AuthMiddlewareStack(URLRouter(ws_urlpatterns))
})

Я запускаю сервер Django таким образом :

python .\manage.py runsslserver --certificate .\sendapp\certif.crt --key .\sendapp\code.key 0.0.0.0:8000

Я понимаю, что для использования безопасных вебсокет нужно использовать сервер Daphne. Поэтому я попробовал запустить его в базовой конфигурации в корне manage.py :

daphne sendapp.asgi:application     

но у меня есть этот код ошибки в оболочке :

django.core.exceptions.ImproperlyConfigured: Запрошена настройка INSTALLED_APPS, но настройки не настроены. Вы должны либо определить переменную окружения DJANGO_SETTINGS_MODULE, либо вызвать settings.configure() перед доступом к настройкам.

.

У кого-нибудь есть решение этой ошибки?

Я нашел решение предыдущей проблемы. Похоже, что это происходит из файла asgi. Точнее из :

from django.core.asgi import get_asgi_application
django_asgi_app = get_asgi_application()

Я не знаю почему, но вы должны поместить эти две строки в начало файла, они должны быть первыми строками кода, вот так :

import os, django

from django.core.asgi import get_asgi_application

django_asgi_app = get_asgi_application()

from channels.auth import AuthMiddlewareStack

from channels.routing import ProtocolTypeRouter, URLRouter

from chat.routing import ws_urlpatterns

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'sendapp.settings')
django.setup()

application = ProtocolTypeRouter({
  'https': django_asgi_app,
  'websocket': AuthMiddlewareStack(URLRouter(ws_urlpatterns))
})

После этого, в терминале :

export DJANGO_SETTINGS_MODULE =sendapp.settings

Если вы используете powershell :

$env:DJANGO_SETTINGS_MODULE = 'sendapp.settings'

Теперь это должно работать.

Вернуться на верх