7.2 KiB
Кортежи статуса задачи
TASK_STATUS = (
('New', 'Новая'),
('Deleted', 'Удалено'),
('Waiting', 'Ожидание'),
('Done', 'Выполнена'),
)
Кортеж уровня важности
PRIORITY = (
('Low', 'Низкий'),
('Medium', 'Средний'),
('High', 'Высокий'),
)
Модель задачи
author(ForeignKey): Ссылка на пользователя, который создал задачу.title(CharField): Название задачи (до 150 символов).summary(TextField): Краткое описание задачи.content(TextField): Подробное описание задачи.is_active(BooleanField): Флаг, указывающий на активность задачи.is_deleted(BooleanField): Флаг, указывающий на удаление задачи.priority(CharField): Приоритет задачи (выбор из предустановленных значений).status(CharField): Статус задачи (выбор из предустановленных значений).is_complete(BooleanField): Флаг, указывающий на завершение задачи.**start_time**(DateTimeField): Дата и время начала задачи.end_time(DateTimeField): Крайний срок выполнения задачи.created(DateTimeField): Время создания задачи (автоматически заполняется при создании).updated(DateTimeField): Время последнего обновления задачи (автоматически обновляется при изменениях).substacles(ManyToManyField): Связь между задачами, представляющая подзадачи текущей задачи.**favorites**(ManyToManyField): Пользователи, которые добавили задачу в избранное.suppliers(ManyToManyField): Пользователи, ответственные за выполнение задачи.supporters(ManyToManyField): Соисполнители задачи.observers(ManyToManyField): Пользователи, наблюдающие за выполнением задачи.**tags** (TaggableManager): Теги, связанные с задачей для удобной классификации.
Сериализатор
- TodoSerializer:
id(IntegerField): Идентификатор задачи.title(CharField): Заголовок задачи.description(CharField): Описание задачи.body(CharField): Текст задачи.tagList(ListField): Список тегов задачи.is_complete(BooleanField): Завершена ли задача.status(CharField): Статус задачи.priority(CharField): Приоритет задачи.is_deleted(BooleanField): Удалена ли задача.is_active(BooleanField): Активна ли задача.createdAt(DateTimeField): Дата и время создания задачи.updatedAt(DateTimeField): Дата и время последнего обновления задачи.startTimedAt(DateTimeField): Дата и время начала задачи.endTimedAt(DateTimeField): Дата и время завершения задачи.author(AuthorSerializer): Сериализатор автора задачи.substacles(ListField): Список препятствий задачи.favorited(BooleanField): Понравилась ли задача.favoritesCount(IntegerField): Количество пользователей, отметивших задачу как понравившуюся.supplierd(IntegerField): Идентификатор поставщика.suppliersCount(IntegerField): Количество поставщиков.supporterd(IntegerField): Идентификатор поддержки.supportersCount(IntegerField): Количество поддерживающих.observerd(IntegerField): Идентификатор наблюдателя.observersCount(IntegerField): Количество наблюдателей.
Маршрутизатор
-
DefaultRouterиз библиотекиrest_framework.routersавтоматически создает маршруты для представлений на основе их названий и методов (например, GET, POST, PUT, DELETE). За вас обрабатывается большая часть создания URL-путей, что делает код более модульным и менее подверженным ошибкам. -
todo_router.register('todos', views.TodoView, basename='todos')регистрирует представлениеTodoViewдля работы с задачами. Аргументыbasename='todos'используются для создания имени маршрута, которое будет использоваться в генерации URL (например,todos-list,todos-detail,todos-createtodos-edittodos-delete.). -
todo_router.register('tags', views.TagView)регистрирует представлениеTagViewдля работы с тегами. Аналогично создаются маршруты для работы с тегами (tags-list,tags-detail,tags-createtags-edittags-delete).
Контроллер
- TodoView:
- Представление для работы с задачами (todos).
- Использует
ModelViewSet, который предоставляет CRUD-функциональность и многое другое. - Включает методы
list,create,retrieve,update,destroyдля обработки соответствующих HTTP-запросов. - Содержит дополнительные действия (
favorite,feed) с использованием декоратора@action.
Права доступа
-
IsOwnerOrCollaborator:
- Позволяет редактирование задач только владельцу задачи или соисполнителям.
- Метод
has_object_permissionпроверяет, что запросы на изменение (методы, отличные от GET, HEAD и OPTIONS) выполняются только для владельца задачи или соисполнителей.
-
CanViewTodoDetail:
- Позволяет просмотр деталей задачи автору, соисполнителям, поставщикам, наблюдателям и избранным.
- Метод
has_object_permissionпроверяет, что пользователь является автором задачи, соисполнителем, поставщиком, наблюдателем или избранным.