Теперь, когда мы настроили модели, давайте создадим представление Django, в котором перечислены все группы в приложении, а также представление для определенного группового чата.
Несмотря на то, что протокол, с которым вы будете работать чаще всего, — это протокол websocket, вам все равно нужны представления Django и URL-адрес, который обрабатывает HTTP, потому что пользователь попадет на страницу через HTTP, а шаблон HTML-страницы будет загружен функцией просмотра. связанный с URL-адресом. Кроме того, начальное рукопожатие веб-сокета будет выполняться через HTTP.
Откройте chat/views.py и добавьте следующий код для создания представлений:
from django.http import HttpResponseForbidden
from django.shortcuts import render, get_object_or_404
from .models import Group
from django.contrib.auth.decorators import login_required
@login_required
def home_view(request):
'''Главная страница, на которой перечислены все группы'''
groups = Group.objects.all()
user = request.user
context = {
"groups": groups,
"user": user
}
return render(request, template_name="chat/home.html", context=context)
@login_required
def group_chat_view(request, uuid):
'''Представление для группы, где все сообщения и события отправляются на интерфейс'''
group = get_object_or_404(Group, uuid=uuid)
if request.user not in group.members.all():
return HttpResponseForbidden("You are not a member of this group.\
Kindly use the join button")
messages = group.message_set.all()
events = group.event_set.all()
''' События - это сообщения, которые указывают
Что пользователь присоединился к группе или покинул ее.
Они будут отправлены автоматически, когда пользователь присоединится к группе или покинет ее.
'''
# Сортируем по метке времени так, чтобы они были перечислены по порядку
message_and_event_list = [*messages, *events]
sorted_message_event_list = sorted(message_and_event_list, key=lambda x: x.timestamp)
group_members = group.members.all()
context = {
"message_and_event_list": sorted_message_event_list,
"group_members": group_members,
}
return render(request, template_name="chat/groupchat.html", context=context)
Добавьте шаблоны URL в представления, чтобы вы могли видеть, как выглядит страница.
Создайте файл urls.py в директории приложения chat и добавьте следующие шаблоны URL:
from django.urls import path
from . import views
urlpatterns = [
path("", views.home_view, name="home"),
path("groups/<uuid:uuid>/", views.group_chat_view, name="group")
]
Включите шаблоны URL chat/urls.py в основной файл проекта urls.py:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path("accounts/", include("django.contrib.auth.urls")),
path('', include("chat.urls")),
]