- В консоль должны выводиться все сообщения уровня
DEBUG
и выше, включающие время, уровень сообщения, сообщения. Для сообщенийWARNING
и выше дополнительно должен выводиться путь к источнику события (используется аргументpathname
в форматировании). А для сообщенийERROR
иCRITICAL
еще должен выводить стэк ошибки (аргументexc_info
). Сюда должны попадать все сообщения с основного логгераdjango
. - В файл general.log должны выводиться сообщения уровня
INFO
и выше только с указанием времени, уровня логирования, модуля, в котором возникло сообщение (аргументmodule
) и само сообщение. Сюда также попадают сообщения с регистратораdjango
. - В файл errors.log должны выводиться сообщения только уровня
ERROR
иCRITICAL
. В сообщении указывается время, уровень логирования, само сообщение, путь к источнику сообщения и стэк ошибки. В этот файл должны попадать сообщения только из логгеровdjango.request
,django.server
,django.template
,django.db.backends
. - В файл security.log должны попадать только сообщения, связанные с безопасностью, а значит только из логгера
django.security
. Формат вывода предполагает время, уровень логирования, модуль и сообщение. - На почту должны отправляться сообщения уровней
ERROR
и выше изdjango.request
иdjango.server
по формату, как в errors.log, но без стэка ошибок.
Более того, при помощи фильтров нужно указать, что в консоль сообщения отправляются только при DEBUG = True
, а на почту и в файл general.log — только при DEBUG = False
.
- Добавьте кэширование на страницы с новостями (по 5 минут на каждую) и на главную страницу (одну минуту).
- В шаблонах постарайтесь кэшировать все навигационные элементы (меню, сайдбары и т. д.). Количество кэшируемого времени остаётся на ваше усмотрение. Кроме того, можете использовать любую систему кэширования, какая вам более по нраву.
Продолжаем работать над проектом новостного приложения. В этом модуле мы, конечно же, добавим работу с асинхронными запросами. Для успешного выполнения этого итогового задания модуля вам необходимо:
- Установить Redis.
- Установить Celery.
- Произвести необходимые конфигурации Django для соединения всех компонентов системы.
- Реализовать рассылку уведомлений подписчикам после создания новости.
- Реализовать еженедельную рассылку с последними новостями (каждый понедельник в 8:00 утра).
- В категории должна быть возможность пользователей подписываться на рассылку новых статей в этой категории.
- Если пользователь подписан на какую-либо категорию, то, как только в неё добавляется новая статья, её краткое содержание приходит пользователю на электронную почту, которую он указал при регистрации. В письме обязательно должна быть гиперссылка на саму статью, чтобы он мог по клику перейти и прочитать её.
- Если пользователь подписан на какую-либо категорию, то каждую неделю ему приходит на почту список новых статей, появившийся за неделю с гиперссылкой на них, чтобы пользователь мог перейти и прочесть любую из статей.
- Добавьте приветственное письмо пользователю при регистрации в приложении.
- В классе-представлении редактирования профиля добавить проверку аутентификации.
- Выполнить необходимые настройки пакета allauth в файле конфигурации.
- В файле конфигурации определить адрес для перенаправления на страницу входа в систему и адрес перенаправления после успешного входа.
- Реализовать шаблон с формой входа в систему и выполнить настройку конфигурации URL.
- Реализовать шаблон страницы регистрации пользователей.
- Реализовать возможность регистрации через Google-аккаунт.
- Создать группы common и authors.
- Реализовать автоматическое добавление новых пользователей в группу common.
- Создать возможность стать автором (быть добавленным в группу authors).
- Для группы authors предоставить права создания и редактирования объектов модели Post (новостей и статей).
- В классах-представлениях добавления и редактирования новостей и статей добавить проверку прав доступа.
- Исходный код залить в git-репозиторий.
Добавьте постраничный вывод на /news/, чтобы на одной странице было не больше 10 новостей и были видны
номера лишь ближайших страниц, а также возможность перехода к первой или последней странице.
Добавьте страницу /news/search. На ней должна быть реализована возможность искать новости по определённым критериям.
Критерии должны быть следующие:
- по названию
- по имени автора
- позже указываемой даты
Запрограммируйте страницы создания, редактирования и удаления новостей и статей. Предлагаем вам расположить страницы по следующим ссылкам:
- /news/create/
- /news/>int:pk</edit/
- /news/>int:pk</delete/
- /articles/create/
- /articles/>int:pk</edit/
- /articles/>int:pk</delete/
- Создать новую страницу с адресом /news/, на которой должен выводиться список всех новостей.
- Вывести все статьи в виде заголовка, даты публикации и первых 20 символов текста.
- Новости должны выводиться в порядке от более свежей к самой старой.
- Сделать отдельную страницу для полной информации о статье /news/<id новости>.
- На этой странице должна быть вся информация о статье. Название, текст и дата загрузки в формате день.месяц.год.
- Написать собственный фильтр censor, который заменяет буквы нежелательных слов в заголовках и текстах статей на символ «*».
- Все новые страницы должны использовать шаблон default.html как основу.
Имеет следующие поля:
- cвязь «один к одному» с встроенной моделью пользователей User;
- рейтинг пользователя. Ниже будет дано описание того, как этот рейтинг можно посчитать.
Имеет единственное поле:
- название категории. Поле должно быть уникальным (в определении поля необходимо написать параметр unique = True).
Эта модель должна содержать в себе статьи и новости, которые создают пользователи. Каждый объект может иметь одну или несколько категорий.
Соответственно, модель должна включать следующие поля:
- связь «один ко многим» с моделью Author;
- поле с выбором — «статья» или «новость»;
- автоматически добавляемая дата и время создания;
- связь «многие ко многим» с моделью Category (с дополнительной моделью PostCategory);
- заголовок статьи/новости;
- текст статьи/новости;
- рейтинг статьи/новости.
- связь «один ко многим» с моделью Post;
- связь «один ко многим» с моделью Category.
Под каждой новостью/статьёй можно оставлять комментарии, поэтому необходимо организовать их способ хранения тоже.
Модель будет иметь следующие поля:
- связь «один ко многим» с моделью Post;
- связь «один ко многим» со встроенной моделью User (комментарии может оставить любой пользователь, необязательно автор);
- текст комментария;
- дата и время создания комментария;
- рейтинг комментария.