@opgmc

Как исправить ошибку AttributeError: 'ASGIRequest' object has no attribute 'accept'?

Помогите пожалуйста разобраться с ошибкой. Создал веб-приложение на django. Подключил веб сокеты по инструкции (https://alex-oleshkevich.medium.com/websockets-in-...).
При запуске веб-приложения происходит подключение к веб сокетам с помощью js (ws://localhost/websocket/). Собственно, при событии websocket.accept возникает ошибка:
Internal Server Error: /websocket/
Traceback (most recent call last):
  File "/home/pi/microwire/venv/lib/python3.7/site-packages/asgiref/sync.py", line 458, in thread_handler
    raise exc_info[1]
  File "/home/pi/microwire/venv/lib/python3.7/site-packages/django/core/handlers/exception.py", line 38, in inner
    response = await get_response(request)
  File "/home/pi/microwire/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 233, in _get_response_async
    response = await wrapped_callback(request, *callback_args, **callback_kwargs)
  File "./app/views.py", line 76, in websocket
    await socket.accept()
AttributeError: 'ASGIRequest' object has no attribute 'accept'


Список зависимостей:
asgiref             3.3.4   
click               7.1.2   
Django              3.2.3   
django-user-agents  0.4.0   
djangorestframework 3.12.4  
gunicorn            20.1.0  
h11                 0.12.0  
pip                 18.1    
pkg-resources       0.0.0   
psycopg2            2.8.6   
pytz                2021.1  
setuptools          40.8.0  
sqlparse            0.4.1   
typing-extensions   3.10.0.0
ua-parser           0.10.0  
user-agents         2.2.0   
uvicorn             0.13.4


views.py:
from django.http import *
from django.shortcuts import render
from .models import Settings
from microwire.connection import WebSocket

async def websocket(socket: WebSocket):
    await socket.accept()
    while True:
        message = await socket.receive_text()
        await socket.send_text(message)

def index(request):
    current_settings = Settings.objects.all()[0]
    settings = Settings.objects.all()[1:]
    return render(request, 'index.html', {'current_settings': current_settings, 'settings': settings})


urls.py:
from app import views
from django.urls import path, include

websocket = path

urlpatterns = [
    websocket('websocket/', views.websocket),
    path('', views.index)
]
  • Вопрос задан
  • 281 просмотр
Пригласить эксперта
Ответы на вопрос 1
@alexbprofit
Junior SE
pip install channels
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы