Приложение Categories, системы Карта Успеха — различия между версиями
Материал из m6a
Vshpagin (обсуждение | вклад) (→Category) |
Vshpagin (обсуждение | вклад) (→Настройки графика) |
||
(не показаны 4 промежуточные версии этого же участника) | |||
Строка 31: | Строка 31: | ||
== URL маршруты == | == URL маршруты == | ||
− | + | /categories/ | |
− | + | ├── '' # Список категорий | |
− | + | ├── '<int:pk>/' # Детали категории | |
− | + | ├── 'create/' # Создание категории | |
− | + | ├── 'update/<int:pk>/' # Обновление категории | |
− | + | ├── 'delete/<int:pk>/' # Удаление категории | |
− | + | ├── 'load-categories/' # Загрузка из JSON | |
+ | ├── 'category_chart/' # График категорий | ||
+ | └── 'load_life_needs/<int:category_id>/' # Загрузка потребностей | ||
== Представления (Views) == | == Представления (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 === | === CategoryForm === | ||
− | + | class CategoryForm(forms.ModelForm): | |
− | + | fields = ['name', 'description', 'completion_percentage'] | |
− | + | labels = { | |
− | + | 'name': 'Название', | |
+ | 'description': 'Описание', | ||
+ | 'completion_percentage': 'Процент выполнения' | ||
+ | } | ||
== Шаблоны == | == Шаблоны == | ||
Строка 87: | Строка 94: | ||
=== Настройки графика === | === Настройки графика === | ||
− | + | 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 | ||
+ | ) | ||
+ | ) | ||
+ | ) | ||
== Тестирование == | == Тестирование == |
Текущая версия на 13:55, 30 марта 2025
Содержание
Общее описание
Приложение `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
- Массовое создание
- Обработка ошибок
- Логирование