Lil*_* H. 3 django channel server daphne
I\xe2\x80\x99m 试图让 django 通道与 daphne 一起运行,但我总是以这个结束
\nx8/backback/mysite \xc2\xbb daphne mysite.asgi:application 1 \xe2\x86\xb5\nTraceback (most recent call last):\n File "/Users/me/.local/share/virtualenvs/backback-jdouan2y/bin/daphne", line 8, in <module>\n sys.exit(CommandLineInterface.entrypoint())\n File "/Users/me/.local/share/virtualenvs/backback-jdouan2y/lib/python3.8/site-packages/daphne/cli.py", line 170, in entrypoint\n cls().run(sys.argv[1:])\n File "/Users/me/.local/share/virtualenvs/backback-jdouan2y/lib/python3.8/site-packages/daphne/cli.py", line 232, in run\n application = import_by_path(args.application)\n File "/Users/me/.local/share/virtualenvs/backback-jdouan2y/lib/python3.8/site-packages/daphne/utils.py", line 12, in import_by_path\n target = importlib.import_module(module_path)\n File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/importlib/__init__.py", line 127, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n File "<frozen importlib._bootstrap>", line 1014, in _gcd_import\n File "<frozen importlib._bootstrap>", line 991, in _find_and_load\n File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked\n File "<frozen importlib._bootstrap>", line 671, in _load_unlocked\n File "<frozen importlib._bootstrap_external>", line 783, in exec_module\n File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed\n File "./mysite/asgi.py", line 11, in <module>\n from channels.auth import AuthMiddlewareStack\n File "/Users/me/.local/share/virtualenvs/backback-jdouan2y/lib/python3.8/site-packages/channels/auth.py", line 12, in <module>\n from django.contrib.auth.models import AnonymousUser\n File "/Users/me/.local/share/virtualenvs/backback-jdouan2y/lib/python3.8/site-packages/django/contrib/auth/models.py", line 2, in <module>\n from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager\n File "/Users/me/.local/share/virtualenvs/backback-jdouan2y/lib/python3.8/site-packages/django/contrib/auth/base_user.py", line 48, in <module>\n class AbstractBaseUser(models.Model):\n File "/Users/me/.local/share/virtualenvs/backback-jdouan2y/lib/python3.8/site-packages/django/db/models/base.py", line 108, in __new__\n app_config = apps.get_containing_app_config(module)\n File "/Users/me/.local/share/virtualenvs/backback-jdouan2y/lib/python3.8/site-packages/django/apps/registry.py", line 253, in get_containing_app_config\n self.check_apps_ready()\n File "/Users/me/.local/share/virtualenvs/backback-jdouan2y/lib/python3.8/site-packages/django/apps/registry.py", line 135, in check_apps_ready\n settings.INSTALLED_APPS\n File "/Users/me/.local/share/virtualenvs/backback-jdouan2y/lib/python3.8/site-packages/django/conf/__init__.py", line 82, in __getattr__\n self._setup(name)\n File "/Users/me/.local/share/virtualenvs/backback-jdouan2y/lib/python3.8/site-packages/django/conf/__init__.py", line 63, in _setup\n raise ImproperlyConfigured(\ndjango.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.\nRun Code Online (Sandbox Code Playgroud)\n我有
\n姜戈==3.1.7
\n达芙妮==3.0.1
\n频道==3.0.3
\n我成功地从他们的网站完成了频道设置https://channels.readthedocs.io/en/stable/tutorial/part_1.html
\n但最终当我尝试一个简单的方法时,它\xe2\x80\x99t 不适用于达芙妮:
\ndaphne mysite.asgi:application \nRun Code Online (Sandbox Code Playgroud)\n或者
\ndaphne -p 8001 mysite.asgi:application \nRun Code Online (Sandbox Code Playgroud)\n这是我当前的 asgi.py
\nimport os\nimport django\nfrom channels.auth import AuthMiddlewareStack\nfrom channels.routing import ProtocolTypeRouter, URLRouter\nfrom django.core.asgi import get_asgi_application\nimport chat.routing\n\nos.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")\ndjango.setup()\napplication = ProtocolTypeRouter({\n "http": get_asgi_application(),\n "websocket": AuthMiddlewareStack(\n URLRouter(\n chat.routing.websocket_urlpatterns\n )\n ),\n})\nRun Code Online (Sandbox Code Playgroud)\n在 runserver 之前我也尝试过:
\nexport DJANGO_SETTINGS_MODULE=mysite.settings\nRun Code Online (Sandbox Code Playgroud)\n在做通道教程时,他们要求我们确保通道层可以与 Redis 通信(教程的第 2 部分)
\n$ python3 manage.py shell\n>>> import channels.layers\n>>> channel_layer = channels.layers.get_channel_layer()\n>>> from asgiref.sync import async_to_sync\n>>> async_to_sync(channel_layer.send)(\'test_channel\', {\'type\': \'hello\'})\n>>> async_to_sync(channel_layer.receive)(\'test_channel\')\n{\'type\': \'hello\'}\nRun Code Online (Sandbox Code Playgroud)\n如果我直接使用 python3 shell 而不是 python3 manage.py shell,我会收到与尝试运行 daphne 时遇到的类似错误。我想也许有联系,但我不知道在哪里以及为什么。我花了好几天的时间,做了又重做,请帮忙~
\n小智 5
是的,在你的 asgi.py 中,你必须将以下代码移到“fromchannels.auth import AuthMiddlewareStack”之前:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '****.settings')
django.setup()
Run Code Online (Sandbox Code Playgroud)
看图片 https://i.stack.imgur.com/szSw4.jpg