996 字
5 分钟
Django开发系列(三):核心模块设计与实现
核心模块设计与实现
项目背景在完成项目结构设计和开发规范制定后,我们需要实现系统的核心功能模块。本篇将详细介绍各个模块的设计思路和实现方法,包括用户管理、信息管理、计划管理等核心功能。
技术特点
- 模块化的功能设计
- 清晰的接口定义
- 高效的数据处理
- 完善的错误处理
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)
总结
关键收获
- 掌握了核心模块设计方法
- 理解了模块间交互设计
- 熟悉了服务实现模式
- 积累了开发实践经验
注意事项
模块设计
- 保持接口一致性
- 注意数据同步
- 完善错误处理
性能考虑
- 优化数据库查询
- 合理使用缓存
NOTE本文是Django开发系列的第三篇,重点介绍了核心模块的设计与实现