14๐
You need to use url
, I had the same problem:
Not working
websocket_urlpatterns = [
path('ws/chat/<str:room_name>/$', consumers.ChatConsumer),
]
Working
websocket_urlpatterns = [
url(r'^ws/chat/(?P<room_name>[^/]+)/$', consumers.ChatConsumer),
]
7๐
Try something like this:
routing.py (Inside your django app folder)
from django.urls import path
from core import consumers
websocket_urlpatterns = [
path('ws/rooms/<uri>/', consumers.ChatConsumer),
]
routing.py (Same level as your settings.py)
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import myapp.routing
application = ProtocolTypeRouter({
# (http->django views is added by default)
'websocket': AuthMiddlewareStack(
URLRouter(
myapp.routing.websocket_urlpatterns
)
),
})
And lastly in your settings.py
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {
"hosts": [REDIS_URL],
},
},
}
INSTALLED_APPS.append('channels')
ASGI_APPLICATION = 'myapp.routing.application'
- Self.model() in django custom UserManager
- Can't open file 'django-admin.py': [Errno 2] No such file or directory
6๐
I met the same problem as you,and just now I happened to solve it!
in my ws_client.py I wrote this
ws.create_connection("ws://127.0.0.1:8000/alarm")
and in routing.py I changed to this below and it worked
from django.urls import path
channel_routing = [
path('alarm',consumers.ws_message),
# before I wrote 'alarm/', I just change from alarm/ to alarm
]
and it worked! you can try it
- Django: Duplicated logic between properties and queryset annotations
- Django Rest Framework: Serialize data from nested json fields to plain object
- ImportError: No module named mysite.settings (Django)
2๐
To anyone new that may be facing this issue. Donโt use the path
pattern matcher with a regular expression. If you wish to do use, use either url
or re_path
instead.
using path
Match pattern without trailing or leading slash (/) and make sure pattern corresponds with client web socket URL
websocket_urlpatterns = [
path("ws/chat/<int:uri>", ChatConsumer.as_asgi()),
]
Using re_path
or url
Match pattern without trailing slash (/).
url(r'^ws/chat/(?P<uri>[^/]+)/$', ChatConsumer.as_asgi()),
NOTE: I advise using path
because itโs easier to match patterns and read.
- Verbose_name for a model's method
- Hiding secret key in django project on github after uploading project
- Improving Performance of Django ForeignKey Fields in Admin
- How to throttle Django error emails
- Django Rest Framework โ Getting a model instance after serialization
1๐
Removing the slash from the app.routing routes file solved the problem, I guess it was being counted a duplicate slash in the URL of that socket.
For instance, I had:
url(r'/ws/documents/get-df', consumers.DFConsumer.as_asgi())
This was not working, but it worked when I removed the first slash before was
url(r'ws/documents/get-df', consumers.DFConsumer.as_asgi())
- Login_required decorator on ajax views to return 401 instead of 302
- How to Test Stripe Webhooks with Mock Data
- Django models โ assign id instead of object
0๐
i had similar issue and added .as_asgi() and it worked
url(r"messages/(?P<username>[\w.@+-]+)/", ChatConsumer.as_asgi())
,
- Django message template tag checking
- NameError: global name 'logger' is not defined
- Django ALLOWED_HOSTS with ELB HealthCheck
- Default value for foreign key in Django migrations.AddField
- How to add 'collapse' to a Django StackedInline
- Duplicate elements in Django Paginate after `order_by` call
- Host Django with XAMPP on Windows
0๐
I spent like more than an hour to this problem and I found out that django project my default doesnโt take asgi.py configuration settings in consideration.
-
Install daphne into your project
python -m pip install daphne
-
list into your
INSTALLED_APPS
array
INSTALLED_APPS = [
"daphne",
...,
]
- Mentioned asgi application object
ASGI_APPLICATION = "myproject.asgi.application"
Run your project and see if it connects with your websocket.
For context, my asgi.py file is like this
import os
from django.core.asgi import get_asgi_application
from django.urls import path
from channels.routing import ProtocolTypeRouter, URLRouter
from chat_app.routing import ChatConsumer
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'teacher_gpt_chat.settings')
websocket_urlpatterns = [
path('ws/chat', ChatConsumer.as_asgi())
]
application = ProtocolTypeRouter(
{
"http": get_asgi_application(),
"websocket": URLRouter(websocket_urlpatterns),
}
)
- Dyld: Library not loaded: @executable_path/../.Python
- What am I not doing right in this django file upload form?