Получение ошибки при попытке запуска на сервер с каналами

У меня проблема с запуском python manage.py runserver, для лучшего примера смотрите мой код, вдохновленный книгой Django 3 на примере.

settings.py:

project/urls.py:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.auth import views as auth_views
from courses.views import CourseListView


urlpatterns = [
    path('accounts/login/', auth_views.LoginView.as_view(),
          name='login'),
    path('accounts/logout/', auth_views.LogoutView.as_view(),
          name='logout'),
    path('admin/', admin.site.urls),
    path('course/', include('courses.urls')),
    path('', CourseListView.as_view(), name='course_list'),
    path('students/', include('students.urls')),
    path('__debug__/', include('debug_toolbar.urls')),
    path('chat/', include('chat.urls', namespace='chat')),
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL,
                          document_root=settings.MEDIA_ROOT)

chat/views.py:

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseForbidden
from django.contrib.auth.decorators import login_required


@login_required
def course_chat_room(request, course_id):
    try:
        # retrieve course  with given id joined by the current user
        course = request.user.courses_joined.get(id=course_id)
    except:
        # user is not a student of the course or course does not exist
        return HttpResponseForbidden()
    return render(request, 'chat/room.html', {'course': course}) 

chat/urls.py:

from django.urls import path
from . import views

app_name = 'chat'

urlpatterns = [
 path('room/<int:course_id>/', views.course_chat_room,
 name='course_chat_room'),
]

chat/consumers.py:

import json
from channels.generic.websocket import AsyncWebsocketConsumer
from asgiref.sync import async_to_sync
from django.utils import timezone


class ChatConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        self.user = self.scope['user']
        self.id = self.scope['url_route']['kwargs']['course_id']
        self.room_group_name = 'chat_%s' % self.id
        # join room group
        await self.channel_layer.group_add(
            self.room_group_name,
            self.channel_name
        )
        # accept connection
        await self.accept()

    async def disconnect(self, close_code):
        # leave room group
        await self.channel_layer.group_discard(
            self.room_group_name,
            self.channel_name
        )

    # receive message from WebSocket
    async def receive(self, text_data):
        text_data_json = json.loads(text_data)
        message = text_data_json['message']
        now = timezone.now()

        # send message to room group
        await self.channel_layer.group_send(
            self.room_group_name,
            {
                'type': 'chat_message',
                'message': message,
                'user': self.user.username,
                'datetime': now.isoformat(),
            }
        )

    # receive message from room group
    async def chat_message(self, event):
        # send message to WebSocket
        await self.send(text_data=json.dumps(event))

chat/routing.py:

from django.urls import re_path
from . import consumers


websocket_urlpatterns = [
 re_path(r'ws/chat/room/(?P<course_id>\d+)/$', consumers.
ChatConsumer),
] 

project/routing.py:

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import chat.routing

application = ProtocolTypeRouter({
    'websocket': AuthMiddlewareStack(
        URLRouter(
            chat.routing.websocket_urlpatterns
        )
    ),
}) 

ERROR:

При попытке интерактивного модуля и попытке импортировать приложение из проекта routing.py, я получаю эту ошибку.

$ python manage.py shell
>> from educa.routing import application
Traceback (most recent call last):  File "<console>", line 1, in <module>
  File "C:\Users\Sagittarius Infiny A\Desktop\educa2\educa\routing.py", line 1, in <module>
    from channels.auth import AuthMiddlewareStack
  File "C:\Users\Sagittarius Infiny A\Desktop\educa2\env\lib\site-packages\channels\auth.py", line 15, in <module>
    from django.utils.translation import LANGUAGE_SESSION_KEY
ImportError: cannot import name 'LANGUAGE_SESSION_KEY' from 'django.utils.translation' (C:\Users\Sagittarius Infiny A\Desktop\educa2\env\lib\site-packages\django\utils\translation\__init__.py) 

удалите пакет каналов, затем установите пакет каналов, это работает для меня....

Вернуться на верх