996 字
5 分钟
Django开发系列(三):核心模块设计与实现
2025-04-15
无标签

核心模块设计与实现#

项目背景

在完成项目结构设计和开发规范制定后,我们需要实现系统的核心功能模块。本篇将详细介绍各个模块的设计思路和实现方法,包括用户管理、信息管理、计划管理等核心功能。

技术特点
  • 模块化的功能设计
  • 清晰的接口定义
  • 高效的数据处理
  • 完善的错误处理

1. 用户模块#

1.1 用户模型设计#

模型设计

用户模块是系统的核心,需要考虑:

  • 用户信息完整性
  • 安全性要求
  • 扩展性设计
# models.py
class User(models.Model):
    user_id = models.CharField(max_length=50, unique=True)
    password = models.CharField(max_length=128)
    email = models.EmailField(unique=True)
    phone = models.CharField(max_length=20, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    class Meta:
        db_table = "user"
        ordering = ["-created_at"]
        
    def __str__(self):
        return self.user_id

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    nickname = models.CharField(max_length=50, null=True)
    avatar = models.ImageField(upload_to="avatars/", null=True)
    gender = models.CharField(max_length=10, choices=GENDER_CHOICES, null=True)
    birth_date = models.DateField(null=True)
    
    class Meta:
        db_table = "user_profile"

1.2 用户服务实现#

服务设计

用户服务需要提供:

  • 用户注册登录
  • 信息管理
  • 权限控制
# services.py
class UserService:
    def register(self, user_data):
        """用户注册"""
        try:
            user = User.objects.create(
                user_id=user_data["user_id"],
                password=make_password(user_data["password"]),
                email=user_data["email"]
            )
            UserProfile.objects.create(user=user)
            return user
        except IntegrityError:
            raise ValueError("用户已存在")

    def login(self, user_id, password):
        """用户登录"""
        user = User.objects.get(user_id=user_id)
        if not check_password(password, user.password):
            raise ValueError("密码错误")
        return user

    def update_profile(self, user_id, profile_data):
        """更新用户信息"""
        user = User.objects.get(user_id=user_id)
        profile = user.userprofile
        for key, value in profile_data.items():
            setattr(profile, key, value)
        profile.save()
        return profile

2. 信息管理模块#

2.1 信息模型设计#

模型设计

信息管理模块需要:

  • 存储用户健康数据
  • 支持数据更新
  • 提供数据统计
# models.py
class HealthRecord(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    height = models.FloatField()
    weight = models.FloatField()
    bmi = models.FloatField()
    blood_pressure = models.CharField(max_length=20)
    heart_rate = models.IntegerField()
    recorded_at = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        db_table = "health_record"
        ordering = ["-recorded_at"]

class HealthGoal(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    target_weight = models.FloatField()
    target_date = models.DateField()
    current_progress = models.FloatField(default=0)
    created_at = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        db_table = "health_goal"

2.2 信息服务实现#

服务设计

信息服务需要提供:

  • 数据记录管理
  • 目标设定
  • 进度跟踪
# services.py
class HealthService:
    def record_health_data(self, user_id, health_data):
        """记录健康数据"""
        user = User.objects.get(user_id=user_id)
        health_data["user"] = user
        health_data["bmi"] = self._calculate_bmi(
            health_data["weight"],
            health_data["height"]
        )
        return HealthRecord.objects.create(**health_data)

    def set_health_goal(self, user_id, goal_data):
        """设定健康目标"""
        user = User.objects.get(user_id=user_id)
        goal_data["user"] = user
        return HealthGoal.objects.create(**goal_data)

    def update_progress(self, user_id, progress):
        """更新目标进度"""
        goal = HealthGoal.objects.get(user__user_id=user_id)
        goal.current_progress = progress
        goal.save()
        return goal

3. 计划管理模块#

3.1 计划模型设计#

模型设计

计划管理模块需要:

  • 支持多种计划类型
  • 记录执行情况
  • 提供进度统计
# models.py
class Plan(models.Model):
    PLAN_TYPES = (
        ("diet", "饮食计划"),
        ("exercise", "运动计划"),
        ("sleep", "睡眠计划"),
    )
    
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    plan_type = models.CharField(max_length=20, choices=PLAN_TYPES)
    title = models.CharField(max_length=100)
    description = models.TextField()
    start_date = models.DateField()
    end_date = models.DateField()
    status = models.CharField(max_length=20, default="active")
    created_at = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        db_table = "plan"
        ordering = ["-created_at"]

class PlanRecord(models.Model):
    plan = models.ForeignKey(Plan, on_delete=models.CASCADE)
    completed_at = models.DateTimeField(auto_now_add=True)
    notes = models.TextField(null=True)
    
    class Meta:
        db_table = "plan_record"

3.2 计划服务实现#

服务设计

计划服务需要提供:

  • 计划创建管理
  • 执行记录
  • 进度统计
# services.py
class PlanService:
    def create_plan(self, user_id, plan_data):
        """创建计划"""
        user = User.objects.get(user_id=user_id)
        plan_data["user"] = user
        return Plan.objects.create(**plan_data)

    def record_completion(self, plan_id, notes=None):
        """记录计划完成情况"""
        plan = Plan.objects.get(id=plan_id)
        return PlanRecord.objects.create(
            plan=plan,
            notes=notes
        )

    def get_plan_progress(self, plan_id):
        """获取计划进度"""
        plan = Plan.objects.get(id=plan_id)
        total_days = (plan.end_date - plan.start_date).days
        completed_days = PlanRecord.objects.filter(
            plan=plan
        ).count()
        return {
            "total_days": total_days,
            "completed_days": completed_days,
            "progress": (completed_days / total_days) * 100
        }

4. 模块交互设计#

4.1 服务集成#

集成设计

模块间交互需要考虑:

  • 接口一致性
  • 数据同步
  • 错误处理
# services.py
class HealthSystem:
    def __init__(self):
        self.user_service = UserService()
        self.health_service = HealthService()
        self.plan_service = PlanService()

    def create_user_with_health_data(self, user_data, health_data):
        """创建用户并记录初始健康数据"""
        user = self.user_service.register(user_data)
        health_data["user_id"] = user.user_id
        health_record = self.health_service.record_health_data(
            user.user_id,
            health_data
        )
        return user, health_record

    def generate_health_plan(self, user_id):
        """根据健康数据生成计划"""
        health_data = self.health_service.get_latest_health_data(user_id)
        plan_data = self._generate_plan_data(health_data)
        return self.plan_service.create_plan(user_id, plan_data)

总结#

关键收获
  • 掌握了核心模块设计方法
  • 理解了模块间交互设计
  • 熟悉了服务实现模式
  • 积累了开发实践经验
注意事项
  1. 模块设计

    • 保持接口一致性
    • 注意数据同步
    • 完善错误处理
  2. 性能考虑

    • 优化数据库查询
    • 合理使用缓存
NOTE

本文是Django开发系列的第三篇,重点介绍了核心模块的设计与实现