属性错误:“设置”对象没有属性“解码”

问题描述 投票:0回答:1

我开始为一个学校项目学习 Django,并且正在使用 websocket 服务器做一个聊天项目,但是当重新加载应用程序时,即使我没有在任何地方调用decode(),我也会收到此错误。我正在将 Django Channels 与 Daphne 一起使用。

这是我的消费者.py

from channels.generic.websocket import WebsocketConsumer

class ChatConsumer(WebsocketConsumer):
    def connect(self):
        self.accept()

    def disconnect(self, code):
        pass

这是我的routing.py

from django.urls import path
from . import consumers

websocket_urlpatterns = [
  # path('chat/', consumers.ChatConsumer.as_asgi())
  path('chat/', consumers.ChatConsumer.as_asgi())
]

这是我的asgi.py

import chat.routing
import os

from channels.routing import ProtocolTypeRouter, URLRouter
from channels.security.websocket import AllowedHostsOriginValidator
from django_channels_jwt_auth_middleware.auth import JWTAuthMiddlewareStack
from django.core.asgi import get_asgi_application

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

application = ProtocolTypeRouter({
    'http': get_asgi_application(),
    'websocket': AllowedHostsOriginValidator(
        JWTAuthMiddlewareStack(
            URLRouter(chat.routing.websocket_urlpatterns)
        )
    )
})

我收到了这个回溯

WebSocket HANDSHAKING /chat/ [127.0.0.1:49878]
WebSocket CONNECT /chat/ [127.0.0.1:49878]
Exception inside application: 'set' object has no attribute 'decode'
Traceback (most recent call last):
  File "/Users/macbook/programacao/pap/env/lib/python3.12/site-packages/django/contrib/staticfiles/handlers.py", line 101, in __call__
    return await self.application(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/macbook/programacao/pap/env/lib/python3.12/site-packages/channels/routing.py", line 62, in __call__
    return await application(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/macbook/programacao/pap/env/lib/python3.12/site-packages/channels/security/websocket.py", line 37, in __call__
    return await self.application(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/macbook/programacao/pap/env/lib/python3.12/site-packages/django_channels_jwt_auth_middleware/auth.py", line 36, in __call__
    return await self.app(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/macbook/programacao/pap/env/lib/python3.12/site-packages/channels/sessions.py", line 47, in __call__
    return await self.inner(dict(scope, cookies=cookies), receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/macbook/programacao/pap/env/lib/python3.12/site-packages/channels/sessions.py", line 263, in __call__
    return await self.inner(wrapper.scope, receive, wrapper.send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/macbook/programacao/pap/env/lib/python3.12/site-packages/channels/auth.py", line 185, in __call__
    return await super().__call__(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/macbook/programacao/pap/env/lib/python3.12/site-packages/channels/middleware.py", line 24, in __call__
    return await self.inner(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/macbook/programacao/pap/env/lib/python3.12/site-packages/channels/routing.py", line 116, in __call__
    return await application(
           ^^^^^^^^^^^^^^^^^^
  File "/Users/macbook/programacao/pap/env/lib/python3.12/site-packages/channels/consumer.py", line 94, in app
    return await consumer(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/macbook/programacao/pap/env/lib/python3.12/site-packages/channels/consumer.py", line 58, in __call__
    await await_many_dispatch(
  File "/Users/macbook/programacao/pap/env/lib/python3.12/site-packages/channels/utils.py", line 57, in await_many_dispatch
    await task
AttributeError: 'set' object has no attribute 'decode'
WebSocket DISCONNECT /chat/ [127.0.0.1:49878]
python python-3.x django websocket django-channels
1个回答
0
投票

在你的settings.py中,添加这段代码:

CHANNEL_LAYERS={
    'default': {
        'BACKEND':'channels_redis.core.RedisChannelLayer',
        'CONFIG':{
            'hosts': [('localhost', 6379)],
        }
    },
}

此外,请确保您的 Redis 正常运行。

© www.soinside.com 2019 - 2024. All rights reserved.