Python任务管理系统实体交互逻辑咨询:控制台转Django Web架构
嘿,我来帮你理清楚User和Task这些实体的交互逻辑,顺便把你的初步设计补全优化下,让它更贴合实际开发需求~
核心实体交互逻辑梳理
User与Task的关联关系
最核心的逻辑就是一对多关联:
- 一个
User可以创建并拥有多个Task - 每个
Task只能属于一个User(通过UserID外键关联)
这种关联是任务管理系统的基础,不管是控制台版本还是后续的Django Web版本,这个关系都不会变。
优化后的实体类设计
你原来的类定义太简略了,我帮你补全必要的属性和初始化逻辑,让它更实用:
class User(): def __init__(self, user_id, username, pass_hash, full_name=None): self.user_id = user_id # 唯一标识用户的ID,数据库中设为主键 self.username = username # 用户名,唯一不可重复 self.pass_hash = pass_hash # 加盐后的密码哈希值,绝对不要存明文! self.full_name = full_name # 可选的用户全名 self.tasks = [] # 存储该用户的所有任务实例,控制台阶段可以用这个来关联 def add_task(self, task): # 给用户添加任务的方法,确保任务的user_id和当前用户一致 if task.user_id == self.user_id: self.tasks.append(task) else: raise ValueError("Task's UserID doesn't match this user") class Task(): def __init__(self, task_id, user_id, name, deadline=None, subtasks=None, is_completed=False): self.task_id = task_id # 任务唯一ID,数据库主键 self.user_id = user_id # 关联所属用户的外键 self.name = name # 任务名称 self.deadline = deadline # 截止日期,建议用datetime类型 self.subtasks = subtasks if subtasks is not None else [] # 子任务列表 self.is_completed = is_completed # 任务完成状态标记 def mark_completed(self): self.is_completed = True def add_subtask(self, subtask_name): self.subtasks.append(subtask_name)
数据库层面的映射(SQLite + Django)
如果你后续要转Django Web版本,直接用Django的ORM就能轻松实现这个关联:
# Django models.py 示例 from django.db import models from django.contrib.auth.models import AbstractUser # 自定义User模型(如果需要扩展字段) class CustomUser(AbstractUser): full_name = models.CharField(max_length=100, blank=True) class Task(models.Model): user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name='tasks') name = models.CharField(max_length=200) deadline = models.DateTimeField(null=True, blank=True) subtasks = models.JSONField(default=list) # 用JSON存储子任务列表,或者单独建Subtask模型 is_completed = models.BooleanField(default=False) def __str__(self): return self.name
这里ForeignKey就实现了User和Task的一对多关联,on_delete=models.CASCADE表示如果用户被删除,他的所有任务也会被删除,符合逻辑。
控制台应用阶段的交互示例
在控制台版本里,你可以这样实现简单的用户-任务交互:
# 示例代码 # 创建用户 user1 = User(user_id=1, username="torsen", pass_hash="hashed_password_123", full_name="Tor Sen") # 创建任务 task1 = Task(task_id=1, user_id=1, name="完成任务管理系统设计", deadline="2024-10-01") task1.add_subtask("梳理实体交互逻辑") task1.add_subtask("编写控制台版本代码") # 给用户添加任务 user1.add_task(task1) # 查看用户的任务 print(f"用户 {user1.username} 的任务:") for task in user1.tasks: status = "已完成" if task.is_completed else "未完成" print(f"- {task.name} | 状态:{status} | 截止日期:{task.deadline}") if task.subtasks: print(" 子任务:") for subtask in task.subtasks: print(f" - {subtask}")
这样你就能在控制台里直观地看到用户和任务的关联操作了。
内容的提问来源于stack exchange,提问作者TorSen
相关产品推荐
相关产品推荐

