我無法在啟用 sll 的 Django 上使用安全的 websockets。我使用 Django 的 sslserver 包來允許在開發服務器上使用 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
我知道要使用安全的 websockets,你必須使用 Daphne 服務器。所以我嘗試在 manage.py 的根目錄中以其基本配置運行它:
daphne sendapp.asgi:application
但我在 shell 中有這個錯誤代碼:
django.core.exceptions.ImproperlyConfigured:請求設定 INSTALLED_APPS,但未配置設定。在訪問設定之前,您必須定義環境變數 DJANGO_SETTINGS_MODULE 或呼叫 settings.configure() 。
有人對此錯誤訊息有解決方案嗎?
uj5u.com熱心網友回復:
我找到了上一個問題的解決方案。它似乎來自 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'
現在應該可以了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/534612.html
標籤:姜戈SSL芫阿斯吉
