Продвинутый Django 5 для продолжающих

Прогресс по курсу:  0/193

8.5 Работа с представлениями и шаблонами
2 из 2 шагов пройдено

Теперь, когда мы настроили модели, давайте создадим представление 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")),
]

Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

path("accounts/", include("django.contrib.auth.urls")) а куда получается делся этот путь ?

https://stepik.org/lesson/1055560/step/4?unit=1064825

@Айреник_Мелконян, Спасибо, поправили.