Напишите приложение "Галерея", которое позволяет своим пользователям загружать фотографии, просматривать их, редактировать, удалять и добавлять в избранное.
Опишите модель фотографии: Фотография - картинка, обязательное; Подпись - строка, обязательное; Дата-время создания - проставляется автоматически; Автор - пользователь, обязательное.
Придумайте, как хранить избранное.
Напишите CRUD для фотографий на шаблонах: Список; Просмотр; Добавление; Редактирование; Удаление.
Указания: В списке выведите фото, подпись, автора, и дату. Отсортируйте фотографии по дате создания в убывающем порядке. На странице просмотра выведите всё то же самое для одной фотографии, а также список пользователей, у кого она в избранном, в виде ссылок на их страницы. При создании фотографии автором автоматически становится текущий пользователь.
Подключите приложение accounts. Достаточно, чтобы работали три страницы: Вход; Выход; Страница пользователя.
Указания: После входа и выхода редирект по умолчанию идёт на главную страницу. На странице пользователя выведите фото, которые у него в избранном, как на главной.
Настройте права доступа: Просмотр фото - доступен всем; Загрузка фотографий - любой аутентифицированный пользователь; Редактирование - автор ИЛИ пользователь с правом на редактирование; Удаление - автор ИЛИ пользователь с правом на удаление; API (см. 5 этап) - только для аутентифицированных пользователей.
Напишите API для избранного любым способом: Добавить в избранное - фото добавляется в избранное текущего пользователя. Удалить из избранного - фото удаляется из избранного текущего пользователя. Фотографии не должны добавляться повторно.
Добавьте к фотографиям на главной и на страницу фотографии кнопки "Добавить в избранное" и "Удалить из избранного": При загрузке страницы видна одна из кнопок: если фото не в избранном - "Добавить", если в избранном - "Удалить". Если пользователь не аутентифицирован, кнопки не видны. По клику на кнопки отправляются AJAX-запросы в API. После успешного запроса нужно поменять кнопки местами - спрятать одну и показать другую. После неуспешного - логируйте ошибки в консоль. Бонусы Бонус (+1 балл): Блокируйте кнопки "Добавить в избранное" и "Удалить из избранного" на время отправки запроса, чтобы пользователь не спамил их.
Бонус (+5 баллов)
Добавьте модель комментария: Текст - текст, обязательное; Фотография - внешний ключ, обязательное; Автор - пользователь, обязательное; Дата-время создания - проставляется автоматически.
Выведите на странице фотографии список комментариев, отсортированный по дате-времени создания в убывающем порядке и форму для добавления комментария.
Напишите API для комментариев любым способом: Добавить комментарий; Удалить комментарий.
Коды фотографий / комментариев для запросов передавайте в url. Автором нового комментария автоматически становится текущий пользователь.
Отправляйте форму комментария AJAX-запросом: После успешного запроса выведите блок нового комментария в начале списка комментариев. После успешного запроса очистите форму.
В блоках комментариев выведите ссылки "Удалить", которые отправляют AJAX-запросы: После успешного запроса удалите блок комментария со страницы.
Права доступа в API и видимость формы и ссылок: Добавить комментарий может любой аутентифицированный пользователь. Удалить комментарий может только автор ИЛИ пользователь с правом на удаление.