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

Материал из m6a
Перейти к: навигация, поиск
(Новая страница: «== Общее описание == Приложение `life_needs` отвечает за управление жизненными потребностями п…»)
 
(Конфигурация)
 
(не показаны 4 промежуточные версии этого же участника)
Строка 5: Строка 5:
  
 
=== LifeNeed ===
 
=== LifeNeed ===
* (Опишите поля модели `LifeNeed`, например:
+
  class LifeNeed(models.Model):
** `id` - Integer (Primary Key)
+
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='life_needs')
** `user` - ForeignKey (связь с моделью User)
+
    category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='life_needs')
** `category` - ForeignKey (связь с моделью Category)
+
    name = models.CharField(max_length=100)
** `name` - CharField (название жизненной потребности)
+
    description = models.TextField(blank=True)
** `description` - TextField (описание)
+
    completion_percentage = models.IntegerField(default=0)
** `completion_percentage` - IntegerField (процент выполнения, от 0 до 100)
+
    priority = models.IntegerField(unique=True)
** `priority` - IntegerField (приоритет)
+
    conditions_for_satisfaction = models.TextField(blank=True)
)
+
    dissatisfaction_risks = models.TextField(blank=True)
 +
    satisfaction_methods = models.TextField(blank=True)
  
 
=== Методы модели ===
 
=== Методы модели ===
* (Опишите методы модели `LifeNeed`, например:
+
  def clean(self):
** `clean()` - Валидация модели
+
    # Валидация процента выполнения
** `increase_completion(amount)` - Увеличение процента выполнения
+
    if not (0 <= self.completion_percentage <= 100):
)
+
        raise ValidationError('Completion percentage must be between 0 and 100.')
 +
 
 +
  def increase_completion(self, amount):
 +
    # Увеличение процента выполнения
 +
    self.completion_percentage = min(self.completion_percentage + amount, 100)
 +
    self.save()
  
 
== Функциональность ==
 
== Функциональность ==
Строка 41: Строка 47:
  
 
== URL маршруты ==
 
== URL маршруты ==
* (Перечислите URL маршруты приложения и их соответствие представлениям, например:
+
  /life-needs/
** `/life_needs/` - Список жизненных потребностей
+
  ├── ''                    # Список потребностей
** `/life_needs/<int:pk>/` - Детали жизненной потребности
+
  ├── '<int:pk>/'          # Детали потребности
** `/life_needs/create/` - Создание жизненной потребности
+
  ├── 'create/<int:categories_id>/'  # Создание
** `/life_needs/<int:pk>/update/` - Обновление жизненной потребности
+
  ├── '<int:pk>/update/'  # Обновление
** `/life_needs/<int:pk>/delete/` - Удаление жизненной потребности
+
  ├── '<int:pk>/delete/'  # Удаление
)
+
  ├── 'load_goals/<int:life_need_id>/'  # Загрузка целей
 +
  ├── '<int:pk>/increase_priority/'  # Повышение приоритета
 +
  └── '<int:pk>/decrease_priority/'  # Понижение приоритета
  
 
== Формы ==
 
== Формы ==
  
 
=== LifeNeedForm ===
 
=== LifeNeedForm ===
* (Опишите поля формы `LifeNeedForm`, например:
+
  class LifeNeedForm(forms.ModelForm):
** `name` - CharField (поле для ввода названия)
+
    fields = [
** `description` - TextField (поле для ввода описания)
+
        'name',
** `category` - ForeignKey (выбор категории)
+
        'description',
)
+
        'category',
 +
        'conditions_for_satisfaction',
 +
        'dissatisfaction_risks',
 +
        'satisfaction_methods'
 +
    ]
  
 
=== Валидация ===
 
=== Валидация ===
Строка 120: Строка 132:
  
 
=== Конфигурация ===
 
=== Конфигурация ===
* (Опишите класс конфигурации приложения `LifeNeedsConfig`, например:
+
  class LifeNeedsConfig(AppConfig):
** `name` - `karta_uspeha.life_needs`
+
    default_auto_field = 'django.db.models.BigAutoField'
** `ready()` - Импорт сигналов
+
    name = 'karta_uspeha.life_needs'
)
+
 
 +
    def ready(self):
 +
        import karta_uspeha.life_needs.signals
  
 
=== Обработка событий ===
 
=== Обработка событий ===

Текущая версия на 13:58, 30 марта 2025

Общее описание

Приложение `life_needs` отвечает за управление жизненными потребностями пользователя. Каждая жизненная потребность принадлежит определенной категории и имеет свой приоритет и процент выполнения.

Модель данных

LifeNeed

 class LifeNeed(models.Model):
   user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='life_needs')
   category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='life_needs')
   name = models.CharField(max_length=100)
   description = models.TextField(blank=True)
   completion_percentage = models.IntegerField(default=0)
   priority = models.IntegerField(unique=True)
   conditions_for_satisfaction = models.TextField(blank=True)
   dissatisfaction_risks = models.TextField(blank=True)
   satisfaction_methods = models.TextField(blank=True)

Методы модели

 def clean(self):
   # Валидация процента выполнения
   if not (0 <= self.completion_percentage <= 100):
       raise ValidationError('Completion percentage must be between 0 and 100.')
 def increase_completion(self, amount):
   # Увеличение процента выполнения
   self.completion_percentage = min(self.completion_percentage + amount, 100)
   self.save()

Функциональность

Основные операции

  • Создание жизненных потребностей
  • Редактирование жизненных потребностей
  • Удаление жизненных потребностей
  • Просмотр списка потребностей
  • Просмотр деталей потребности

Управление приоритетами

  • Повышение приоритета
  • Понижение приоритета
  • Автоматическое назначение приоритета при создании

Дополнительные функции

  • Загрузка целей из JSON
  • Отслеживание процента выполнения
  • Управление условиями удовлетворения

URL маршруты

 /life-needs/
 ├──                     # Список потребностей
 ├── '<int:pk>/'          # Детали потребности
 ├── 'create/<int:categories_id>/'  # Создание
 ├── '<int:pk>/update/'   # Обновление
 ├── '<int:pk>/delete/'   # Удаление
 ├── 'load_goals/<int:life_need_id>/'  # Загрузка целей
 ├── '<int:pk>/increase_priority/'  # Повышение приоритета
 └── '<int:pk>/decrease_priority/'  # Понижение приоритета

Формы

LifeNeedForm

 class LifeNeedForm(forms.ModelForm):
   fields = [
       'name', 
       'description', 
       'category',
       'conditions_for_satisfaction',
       'dissatisfaction_risks',
       'satisfaction_methods'
   ]

Валидация

  • Проверка обязательных полей
  • Валидация категории
  • Проверка имени потребности

Шаблоны

Основные шаблоны

  • `life_need_list.html` - список потребностей
  • `life_need_detail.html` - детали потребности
  • `life_need_form.html` - форма создания/редактирования

Особенности шаблонов

  • Навигация по хлебным крошкам
  • Табличное отображение данных
  • Кнопки управления приоритетом
  • Формы с валидацией

Тестирование

Модульные тесты

  • Создание жизненной потребности
  • Валидация процента выполнения
  • Проверка уникальности приоритета
  • Тест метода `increase_completion`

Проверяемые аспекты

  • Корректность данных
  • Ограничения модели
  • Валидация полей
  • Связи с категориями

Безопасность

Защита

  • Декоратор `@login_required`
  • Валидация данных
  • Проверка прав доступа
  • CSRF защита

Валидация

  • Проверка процента выполнения
  • Уникальность приоритета
  • Обязательные поля
  • Форматы данных

Интеграция

С другими приложениями

  • Связь с категориями
  • Связь с целями
  • Интеграция с пользователями

Импорт данных

  • Загрузка целей из JSON
  • Массовое создание
  • Обработка ошибок
  • Логирование

Сигналы

Конфигурация

 class LifeNeedsConfig(AppConfig):
   default_auto_field = 'django.db.models.BigAutoField'
   name = 'karta_uspeha.life_needs'
   def ready(self):
       import karta_uspeha.life_needs.signals

Обработка событий

  • `post_save` - после сохранения
  • `post_delete` - после удаления
  • Обновление связанных данных

Особенности реализации

Управление приоритетами

  • Автоматическое назначение
  • Переупорядочивание
  • Проверка уникальности

Отслеживание прогресса

  • Процент выполнения
  • Методы увеличения прогресса
  • Ограничения значений

Дополнительные поля

  • Условия удовлетворения
  • Риски неудовлетворенности
  • Методы удовлетворения