Вступление
Привет. Если ты, как и я, находишься на том этапе что:
- Не знаешь как реализовать комментирование на своём сайте ?
- Ищешь возможности и варианты реализации для этого самого комментирования ?
- Просто хочешь готовое приложение/решение которое можно было бы легко интегрировать на свой собственный сайт ?
Тогда ты попал по-верному URL-адресу.
В этой статье я опишу то как можно реализовать простую систему комментирования. Которая бы совмещала возможность
комментировать как для гостей, так и для зарегистрированных пользователей.
Хочу заметить, моей целью не было написание такой системы комментирования, которой свет не видывал. Эта система
подходит для меня и моего сайта. Если и вам она подходит, замечательно. Ну а если нет, я уверен, что из этой статьи
можно много чего подчеркнуть для себя.
Виды и варианты
Как комментирование вообще можно реализовать и какие есть подходы/варианты? Такой вот вопрос я себя задал, когда
впервые потребовалось, добавить комментирование мне на сайт.
-
Я выделил 2 основных вида систем комментирования, по тому кто может оставлять комментарии, остальные лишь их вариации и комбинации.
- Анонимное комментирование ( Любой проходимец сможет оставить у вас на сайте комментарий)
- Аутентифицированное комментирование (Комментирование только для зарегистрированных пользователей)
Анонимное комментирование
Это самое простое в реализации, но при этом самое опасное. Почему опасное ?
Тут, возможно, я не совсем корректно выразился, но под опасным я имел в виду то, что абсолютно любой человек или бот сможет оставить комментарии. В абсолютно любом количестве, и абсолютно любого качества.
Ты ведь сам понимаешь, анонимность даёт людям свободу делать и писать всё что угодно. И по своему опыту знаю,
если у человека есть возможность, поднасрать да ещё и безнаказанно, обязательно найдутся желающие.
Аутентифицированное комментирование
Комментируют только зарегистрированные пользователи.
Если вы разрабатываете социальную сеть или форум или интернет магазин, то эта форма комментирования для вас. Важно помнить, регистрация должна предоставлять некие преимущества тем кто зарегистрировался.
Опять повторюсь, если у вас блог, новостной портал или информационный портал, то не советую. Человеческая лень, это очень тяжело
преодолимое препятствие.
Что же выбрал я? И как оно работает у меня.
У меня смешанная. Как анонимусы, так и зарегистрированные пользователи могут оставлять комментарии под постами.
Представим, вы посетили мой сайт. Вы прочитали интересующую вас статью и решили оставить комментарий.
Скролите до конца, пишете то о чём думаете, жмякаете кнопку, Оставить комментарий.
Выскакивает новая форма, на кнопке, и просит вас ввести ваше имя. Вы вводите его.
Форма оставления комментария изменилась, появилось ваше имя.
Вы, жмякаете, Оставить комментарий ещё раз. Он появляется у вас на странице.
Теперь перейдём к той части, где я пошагово объясняю, как реализовать данную систему комментирования.
Создаём модель комментария
Начнём с модели Comment. Она будет хранить все наши комментарии.
-
Какие поля нам нужны?
- type ➜ поле которое указывает к какой статье оно относится
- user ➜ что за пользователь оставил комментарий( именно зарегистрированный)
- anonymous_user_name ➜ Имя, которое выбрал себе гость
- anonymous_user_id ➜ Будет необходим для возможности отличить анонимный комментарий от не анонимного
- content ➜ собственно сак коммент
- timeCreated ➜ когда был написан
Подготавливаем шаблон комментария и комментариев
-
Вообще нам потребуется 3 шаблона, минимум
- один для рендеринга одного комментария( будет использоваться, когда надо добавить новый комментарий)
- один для рендеринга группы комментариев( будет использоваться, когда надо будет подгружать их)
- и ещё один, где эти комментарии будут отображаться и подгружаться
Вот шаблон для одного комментария
Поясню пару непонятных моментов в этом шаблоне.
Проверка, если комментарий написан анонимным пользователем
Проверка, установленна ли аватарка у пользователя, который опубликовал данный комментарий
Теперь этот кусочек шаблона
Это довольно важный кусочек, так сказать. Вкратце тут говорится, что только зарегистрированный пользователь
сможет удалять свои комментарии.
В шаблоне для комментариев всё абсолютно точно так же как и
для одного комментария. За тем исключением, что он нужен для рендеринга нескольких комментариев.
То есть, там используется цикл for
Подготавливаем шаблон, где эти комментарии будут появляться
Теперь рассмотрим место, где эти комментарии будут отображаться.
Вот этот код я использую в base_post.html. То есть, это шаблон от которого
у меня наследуются все остальные посты( статьи, кейсы, новости ). Короче говоря,
предоставляет базовый функционал для моих статей. Ниже в главе Готовое приложение и другие ресурсы
я оставил ссылку на файл целиком
По правде говоря я использую комментарии не только в постах. У каждого зарегистрированного
пользователя есть свой кабинет, где он может просмотреть все оставленные им комментарии. И удалить,
если захочет.
Расмотрим ту часть base_post.html которая отвечает за комментарии.
Сначала идёт сама форма оставления комментария
Дальше есть кнопка оставить комментарий. Для аутентифицированных пользователей, она просто оставит комментарий.
Но для анонимов, будет отображена другая кнопка ( кнопка всё таже, просто функционал у неё другой)
Она запросит только имя анонима. После чего, будет заменена на обычную кнопку отправления комментария.
Для анонимов
Для зарегистрированных
Пишем ajax запрос для оставления комментария
Шаблоны это конечно хорошо, но теперь надо связать серверную часть с фронтендом. Напишем ajax скрипт
Не забудем подключить его в base_post.html
Небольшое пояснение. Сначала мы подключаем jQuery библиотеку.
Потом сохраняем csrf токен и то какой пост пользователь просматривает сейчас
Дальше подключаем наш скрипт для работы комментариев( там будут находиться наши ajax запросы )
И так как от этого шаблона наследуются шаблоны статей, новостей и кейсов, им могут быть
необходимы отдельные скрипты ( или стили ).
Поэтому это здесь.
Когда нажимается кнопка Отправить коментарий(будь то, от авторизованного или анонимного пользователя)
Выполняется данная функция.
Где мы, отправляем на сервер имя текущего поста, сообщение, и имя пользователя
При успехе, мы рендерим comment.html и вставляем полученый результат над всеми комментариями.
И ещё не забываем добавить событие для возможности удаления данного комментария.
Пишем ajax запрос для загрузки комментариев
Загружать комментарии на сервер это отлично, но и другие пользователи должны видеть
комментарии. Вот функция для отображения комментариев для одного поста.
Важно отметить, эта функция срабатывает, когда полоса прокрутки дошла до конца.
Для этого используется специальный наблюдатель, который и следит за этим.
Пишем ajax запрос для удаления комментария
И небольшой бонус. Как удалять комментарии.
Из предыдущих разделов вы увидели, как и где назначаются события для удаления комментария.
Теперь посмотрим на то как он удаляется.
Как ты заметил, чтобы удалить комментарий нужен его id. Это кастомный атрибут, который мы
заполняем когда рендерим комментарий или комментарии.
Вот он
Не забудь поделиться, лайкнуть и оставить комментарий)
Комментарии
(1)
Отправить
13 июля 2025 г. 14:37
123
Другое
Похожие статьи
Как реализовать регистрацию и логирование пользователей
30.10.2023
11.03.2026
1048
0
0
0
0
Сразу оговорюсь, что система аутентификации, которую мы с тобой будем писать не основана на встроеном приложении django, django.contrib.auth . Это будет отдельное приложение с отдельной моделью к ней.
Создание django приложения и модели к нему
19.07.2024
11.03.2026
402
0
0
0
0
О том как создать/добавить новое приложение к существующему проекту на django, как создать суперюзера, команда, как добавить модель к этому приложению.
Использованные термины
- Пагинация ⟶ Это паттерн дизайна сайтов, который подразумевает разделение контента сайта на отдельные страницы.
- Комментарий ⟶ Это оставленное пользователем сообщение на сайте.
- Сериализатор ⟶ Сериализаторы позволяют преобразовывать сложные данные, такие как наборы запросов и экземпляры моделей, в собственные типы данных Python, которые затем могут быть легко преобразованы в JSON, XML или другие типы содержимого.
- Реакт компонент ⟶ Это независимый, переиспользуемый фрагмент кода, который отвечает за определённый участок пользовательского интерфейса (UI). Компоненты могут быть созданы как классовые, так и функциональные.
Релевантные вопросы
- Чем ты занимался до того как стал вебмастером ? Я делал игры и писал свой собственный игровой движок. Игр сделал 5 и лишь одну выпустил в Play Store. А движок назывался **DI**. Я его забросил
- Мое приложение некорректно отображается на сервере? Если это не работает, в 99% случаев это проблема конфигурации. Отсутствующее свойство, неправильный порядок вызовов или отсутствующий компонент — серверный рендеринг строго относится к конфигурации. Лучший способ выяснить, что не так, — сравнить свой проект с уже работающей настройкой. Ознакомьтесь с эталонными реализациями по частям.
- Как извлечь контент из динамических веб-страниц? Динамичный веб-сайт будет часто обновлять данные. Например, в Twitter всегда есть новые сообщения. Чтобы скрапинговать такой веб-сайт, это тот же процесс, что и скрапинг других веб-сайтов, но это позволит скраперу получать доступ к веб-сайту с некоторой частотой, чтобы получать постоянно обновляемые данные.