Приложение Categories, системы Карта Успеха — различия между версиями

Материал из m6a
Перейти к: навигация, поиск
(Category)
(Настройки графика)
 
(не показаны 4 промежуточные версии этого же участника)
Строка 31: Строка 31:
  
 
== URL маршруты ==
 
== URL маршруты ==
* (Перечислите URL маршруты приложения и их соответствие представлениям, например:
+
  /categories/
** `/categories/` - `category_list` (список категорий)
+
  ├── ''                    # Список категорий
** `/categories/<int:pk>/` - `category_detail` (детали категории)
+
  ├── '<int:pk>/'          # Детали категории
** `/categories/create/` - `category_create` (создание категории)
+
  ├── 'create/'            # Создание категории
** `/categories/<int:pk>/edit/` - `category_edit` (редактирование категории)
+
  ├── 'update/<int:pk>/'  # Обновление категории
** `/categories/<int:pk>/delete/` - `category_delete` (удаление категории)
+
  ├── 'delete/<int:pk>/'  # Удаление категории
)
+
  ├── 'load-categories/'  # Загрузка из JSON
 +
  ├── 'category_chart/'    # График категорий
 +
  └── 'load_life_needs/<int:category_id>/'  # Загрузка потребностей
  
 
== Представления (Views) ==
 
== Представления (Views) ==
  
 
=== Основные представления ===
 
=== Основные представления ===
* (Опишите основные представления, используемые в приложении, например:
+
  @login_required
** `category_list` - Представление для отображения списка категорий.
+
  def category_list(request)
** `category_detail` - Представление для отображения деталей категории.
+
  @login_required
** `category_create` - Представление для создания категории.
+
  def category_detail(request, pk)
** `category_edit` - Представление для редактирования категории.
+
  @login_required
** `category_delete` - Представление для удаления категории.
+
  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)
** Функции для загрузки данных из JSON
+
  def handle_category_form(request, category=None)
** Функции для генерации графиков
+
  def category_chart(request)
)
+
  
 
== Формы ==
 
== Формы ==
  
 
=== CategoryForm ===
 
=== CategoryForm ===
* (Опишите поля формы `CategoryForm`, например:
+
  class CategoryForm(forms.ModelForm):
** `name` - CharField (поле для ввода названия категории)
+
    fields = ['name', 'description', 'completion_percentage']
** `completion_percentage` - IntegerField (поле для ввода процента выполнения)
+
    labels = {
)
+
        'name': 'Название',
 +
        'description': 'Описание',
 +
        'completion_percentage': 'Процент выполнения'
 +
    }
  
 
== Шаблоны ==
 
== Шаблоны ==
Строка 87: Строка 94:
  
 
=== Настройки графика ===
 
=== Настройки графика ===
* (Опишите настройки графика, используемые в 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
 +
        )
 +
    )
 +
  )
  
 
== Тестирование ==
 
== Тестирование ==

Текущая версия на 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
  • Массовое создание
  • Обработка ошибок
  • Логирование