Сегодняшний сайт на Django фреймворке — это сайт «Доска объявлений». В статье приводится описание функциональности сайта. Есть ссылка на демо-сайт, на котором можно посмотреть, как это все выглядит в реальности, и «пощупать» описанную функциональность. Есть ссылка на исходники сайта.

Сайт на Django Доска объявлений

Сайт на Django. Основная функциональность

  • Двухэтапная регистрация пользователя. Первый этап — ввод данных пользователя на странице регистрации сайта. Второй этап — активация пользователя, путем перехода пользователя по ссылке, присланной в электронном письме на email пользователя.
  • Личный кабинет пользователя со следующими возможностями: добавление/редактирование/удаление объявления с фотографиями, просмотр списка объявлений пользователя, редактирование/удаление личного кабинета пользователя.
  • Двухуровневая иерархия рубрик объявлений. Верхний уровень — рубрики общего плана. Нижний уровень — рубрики более конкретные.
  • Вывод объявлений с пагинацией.
  • Поиск объявлений.
  • Комментирование объявлений.
  • Уведомление автора объявления по email о новом комментарии к объявлению.
  • Администрирование пользователей: просмотр пользователей с использованием фильтров, отправка электронных писем зарегистрированным пользователям, не прошедших активацию.
  • Адаптивный внешний вид сайта.

Сайт на Django. Структура

  • Главная страница с десятью последними объявлениями.
  • Страница рубрики с пагинацией и поиском.
  • Страница объявления с комментариями и формой добавления нового комментария.
  • Страница регистрации/активации нового пользователя.
  • Страница входа/выхода в личный кабинет пользователя.
  • Страница личного кабинета пользователя со списком объявлений пользователя.
  • Страница добавления/редактирования/удаления объявления.
  • Страница редактирования/удаления личного кабинета пользователя.
  • Страница о сайте.

Краткое описание

Состав проекта Django

Проект сайта на Django «Доска объявлений» состоит из одного приложения, которое реализует всю функциональность сайта.

Адаптивный дизайн

Для адаптивного внешнего вида сайта используется CSS-фреймворк Bootstrap 4.

Личный кабинет пользователя

Модель пользователя — производная от стандартной абстрактной модели AbstractUser модуля django.contrib.auth.

Для реализации входа в личный кабинет пользователя производный класс от класса LoginView модуля django.contrib.auth.views. Путь accounts/login/ — шаблонный путь Django для перенаправления пользователя при попытке доступа пользователя к закрытой странице сайта. Декоратор login_required() для доступа только авторизованным пользователям (т.е. зарегистрированным пользователям, успешно выполнившим процедуру аутентификации) к некоторым страницам сайта. Путь accounts/profile/ — шаблонный путь Django для перенаправления пользователя в случае успешной аутентификации пользователя.

Для реализации выхода из личного кабинета пользователя производный класс от класса LogoutView модуля django.contrib.auth.views. Примесь LoginRequiredMixin для доступа только авторизованным пользователям к странице выхода из личного кабинета.

Класс UpdateView модуля django.views.generic.edit для правки данных о пользователе. Примесь SuccessMessageMixin применяется для вывода всплывающих сообщений.

Класс PasswordChangeView модуля django.contrib.auth.views для реализации смены пароля пользователя.

Двухэтапная регистрация пользователя

Сигнал для отправки электронного письма с ссылкой-активацией зарегистрированного пользователя. Объявление сигнала в модуле apps.py, т.к. выполняется при инициализации приложения.

Функция password_validation.validate_password(pass) модуля django.contrib.auth для валидации пароля с применением доступных в системе валидаторов пароля.

Для регистрации пользователя производный класс от класса CreateView модуля django.viws.generic.edit.

Для вывода сообщений, например, об успешной регистрации пользователя, производный класс от класса TemplateView модуля django.views.generic.base.

Класс Signer модуля django.core.signing для создания цифровой подписи. Цифровая подпись используется для формирования уникальной и стойкой к подделке ссылки-активации зарегистрированного пользователя.

Для удаления пользователя производный класс от класса DeleteView модуля django.views.generic.edit.

Администрирование пользователей

Для реализации дополнительной фильтрации зарегистрированных пользователей производный класс от класса admin.SimpleListFilter модуля django.contrib.

Для администрирования зарегистрированных пользователей производный класс от класса admin.ModelAdmin модуля django.contrib.

Двухуровневая иерархия рубрик

В базовой модели рубрик хранятся все рубрики, вне зависимости от уровня иерархии. В базовой модели рубрик следующие поля:

  • название рубрики;
  • порядок следования;
  • рубрика верхнего уровня (необязательное поле, запрет каскадного удаления записей).

Запрет каскадного удаления, чтобы исключить случайное удаление вместе с рубрикой верхнего уровня и всех относящихся к ней рубрик нижнего уровня.

Модель рубрик верхнего уровня — это прокси-модель, производная от базовой модели рубрик. Прокси-модель меняет лишь функциональность модели, а не набор объявленных полей. Модель рубрик нижнего уровня — это тоже прокси-модель, производная от базовой модели рубрик.

Обработчик контекста из модуля middlewares.py формирует список рубрик нижнего уровня и помещает его в переменную контекста шаблона.

Объявления

Каждое объявление может содержать главную фотографию и произвольное количество дополнительных фотографий. Необходимые для этого библиотеки: библиотека для создания миниатюр Easy Thumbnails, библиотека для удаления ставших ненужными файлов django-cleanup.

Модель объявления содержит следующие поля:

  • рубрика нижнего уровня (запрет каскадного удаления);
  • название товара;
  • описание товара;
  • цена товара;
  • контакты продавца товара;
  • главная фотография объявления (необязательное поле);
  • зарегистрированный пользователь-автор объявления;
  • показывать или объявление;
  • дата и время публикации объявления.

Модель фотографии к объявлению содержит следующие поля:

  • объявление, к которому относится фотография;
  • фотография.

При удалении объявления удаляются и все относящиеся к нему фотографии объявления. При удалении пользователя удаляются и все оставленные им объявления.

Вывод объявлений с поиском и пагинацией

Класс Q модуля django.db.models для формирования условия фильтрации на основе слова, введенного посетителем сайта в форме поиска. Объявления выводятся с условием фильтрации.

Класс Paginator модуля django.core.paginator для работы пагинации.

Комментарии

К любому опубликованному объявлению на сайте любой посетитель сайта может оставить комментарий. Для неавторизованных пользователей дополнительно выводится CAPTCHA. Django Simple Captcha — необходимая библиотека.

Модель комментария содержит следующие поля:

  • объявление, к которому относится комментарий (разрешено каскадное удаление);
  • имя автора комментария;
  • содержание комментария;
  • показывать ли комментарий;
  • дата и время публикации комментария.

Класс CaptchaField модуля captcha.fields для вывода капчи.

Уведомление по email о новом комментарии

Отправка уведомления о новом комментарии на email автора объявления происходит в обработчике сигнала post_save. Сигнал post_save возникает после сохранения комментария в базе данных.

Класс post_save модуля django.db.models.signal, чтобы привязать к сигналу post_save обработчик сигнала.

Выводы

Статья знакомит с функциональностью веб-сайта электронной доски объявлений. При желании, сайт на Django «Доска объявлений» можно использовать и в качестве блога, потребуются минимальные изменения в коде.

Как это может помочь бизнесу?

Если бизнесу требуется сайт, то знакомство с функциональностью сайта на Django фреймворке может помочь принять правильное решение разработки сайта бизнеса на Django. Ведь фреймворк Django справляется с большим количеством задач. Его применяют как для создания интернет-магазинов и блогов, так и для «нестандартных» веб-приложений: сервисов бронирования гостиниц, коммуникационных платформ, платформ управления документооборотом, программ, помогающим управлять бизнесом (CRM-систем) и т.п.

В комментариях под статьей можно оставлять ваши вопросы.

Комментарии

Добавить комментарий

Этот сайт защищен reCAPTCHA, и к нему применяются Google Политика конфиденциальности и Условия использования.

Войти

Зарегистрироваться

Сбросить пароль

Пожалуйста, введите ваше имя пользователя или эл. адрес, вы получите письмо со ссылкой для сброса пароля.