Приложение Categories, системы Карта Успеха
Материал из m6a
Содержание
Общее описание
Приложение `categories` отвечает за управление категориями жизненных потребностей пользователя. Категории являются верхним уровнем иерархии в системе и служат для группировки жизненных потребностей.
Модель данных
Category
class Category(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='categories') name = models.CharField(max_length=100) description = models.TextField(blank=True) completion_percentage = models.IntegerField(default=0)
Ограничения
- Уникальность имени категории для каждого пользователя
- Валидация процента выполнения (0-100%)
- Связь с пользователем (CASCADE при удалении)
Функциональность
Основные операции
- Создание категорий
- Редактирование категорий
- Удаление категорий
- Просмотр списка категорий
- Просмотр деталей категории
Дополнительные функции
- Загрузка категорий из JSON
- Загрузка жизненных потребностей для категории
- Визуализация данных (графики)
URL маршруты
/categories/ ├── # Список категорий ├── '<int:pk>/' # Детали категории ├── 'create/' # Создание категории ├── 'update/<int:pk>/' # Обновление категории ├── 'delete/<int:pk>/' # Удаление категории ├── 'load-categories/' # Загрузка из JSON ├── 'category_chart/' # График категорий └── 'load_life_needs/<int:category_id>/' # Загрузка потребностей
Представления (Views)
Основные представления
@login_required def category_list(request) @login_required def category_detail(request, pk) @login_required def category_create(request) @login_required def category_update(request, pk) @login_required def category_delete(request, pk)
Вспомогательные функции
def process_form(request, form, success_message, redirect_url) def handle_category_form(request, category=None) def category_chart(request)
Формы
CategoryForm
class CategoryForm(forms.ModelForm): fields = ['name', 'description', 'completion_percentage'] labels = { 'name': 'Название', 'description': 'Описание', 'completion_percentage': 'Процент выполнения' }
Шаблоны
Основные шаблоны
- `category_list.html` - список категорий
- `category_detail.html` - детали категории
- `category_form.html` - форма создания/редактирования
- `category_chart.html` - визуализация данных
Особенности шаблонов
- Навигация по хлебным крошкам
- Табличное отображение данных
- Интеграция с Plotly для графиков
- Формы с валидацией
Визуализация данных
Графики
- Полярная диаграмма категорий
- Отображение процентов выполнения
- Интерактивные подсказки
- Кастомизированные цвета
Настройки графика
fig.update_layout( polar=dict( radialaxis=dict( visible=True, showticklabels=False, tickvals=[10, 20, 30, 40, 50, 60, 70, 80, 90, 100] ), angularaxis=dict( visible=True, direction="counterclockwise", rotation=0 ) ) )
Тестирование
Модульные тесты
- Создание категории
- Валидация процента выполнения
- Уникальность имени категории
- Значения по умолчанию
- Строковое представление
Проверяемые аспекты
- Корректность данных
- Ограничения модели
- Валидация полей
- Связи с пользователем
Безопасность
Защита
- Декоратор `@login_required`
- Валидация данных
- Проверка прав доступа
- CSRF защита
Валидация
- Проверка процента выполнения
- Уникальность имени категории
- Обязательные поля
- Форматы данных
Интеграция
С другими приложениями
- Связь с жизненными потребностями
- Интеграция с пользователями
- Использование общих шаблонов
Импорт данных
- Загрузка из JSON
- Массовое создание
- Обработка ошибок
- Логирование