30分钟搭建你的专属健身追踪应用:cookiecutter-django实战指南
你是否还在为健身计划难以坚持而烦恼?用Excel记录训练数据总是半途而废?本文将带你用cookiecutter-django模板,快速构建一个专业的健身应用,实现训练计划制定、进度跟踪和数据可视化,让健身效果清晰可见。读完本文,你将掌握Django项目的快速搭建技巧,以及如何根据业务需求扩展用户模型和设计数据结构。
为什么选择cookiecutter-django
cookiecutter-django是基于Cookiecutter的Django项目模板,能帮助开发者快速生成遵循最佳实践的项目结构。它预配置了数据库迁移、用户认证、静态文件处理等核心功能,让你无需从零开始搭建框架,专注于业务逻辑开发。项目结构清晰,遵循Django最佳实践,适合快速原型开发和生产环境部署。
官方文档:docs/index.rst
快速搭建项目
环境准备
确保系统已安装Python和Git,然后通过以下命令生成项目:
# 克隆项目仓库
git clone https://gitcode.com/GitHub_Trending/co/cookiecutter-django
cd cookiecutter-django
# 创建虚拟环境并安装依赖
python -m venv venv
source venv/bin/activate # Windows使用 venv\Scripts\activate
pip install -r requirements.txt
# 生成Django项目
cookiecutter .
在生成过程中,根据提示输入项目名称(如"fitness_tracker")、描述和其他配置选项。
项目结构概览
生成的项目结构如下(核心目录):
fitness_tracker/
├── manage.py # Django命令行工具
├── config/ # 项目配置目录
│ ├── settings/ # 不同环境的设置
│ ├── urls.py # 主URL配置
│ └── wsgi.py # WSGI配置
└── fitness_tracker/ # 主应用目录
├── users/ # 用户相关功能
├── templates/ # HTML模板
└── static/ # 静态文件(CSS/JS/图片)
项目初始化文档:{{cookiecutter.project_slug}}/README.md
扩展用户模型
分析现有用户模型
cookiecutter-django默认提供了自定义用户模型,位于{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/models.py,核心代码如下:
class User(AbstractUser):
name = CharField(_("Name of User"), blank=True, max_length=255)
first_name = None
last_name = None
def get_absolute_url(self) -> str:
return reverse("users:detail", kwargs={"username": self.username})
该模型移除了Django默认的first_name和last_name字段,使用单一的name字段,并支持通过邮箱登录(根据配置)。
添加健身相关字段
为用户添加身高、体重、目标等健身相关属性,修改models.py:
from django.db.models import FloatField, DateField, CharField
class User(AbstractUser):
# 原有字段保持不变
name = CharField(_("Name of User"), blank=True, max_length=255)
first_name = None
last_name = None
# 新增健身相关字段
height = FloatField(_("Height (cm)"), blank=True, null=True)
weight = FloatField(_("Weight (kg)"), blank=True, null=True)
fitness_goal = CharField(_("Fitness Goal"), max_length=100, blank=True)
join_date = DateField(_("Join Date"), auto_now_add=True)
# 保持原有的get_absolute_url方法
def get_absolute_url(self) -> str:
return reverse("users:detail", kwargs={"username": self.username})
用户模型表单:{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/forms.py
设计训练数据模型
创建训练计划模型
在users应用中创建训练计划模型,记录用户的训练安排:
# users/models.py 添加以下代码
from django.db import models
from django.conf import settings
class TrainingPlan(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(_("Plan Title"), max_length=100)
description = models.TextField(_("Description"), blank=True)
start_date = models.DateField(_("Start Date"))
end_date = models.DateField(_("End Date"))
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.user.name}'s {self.title}"
创建训练记录模型
记录每次训练的详细数据:
class Exercise(models.Model):
name = models.CharField(_("Exercise Name"), max_length=100)
muscle_group = models.CharField(_("Muscle Group"), max_length=50)
def __str__(self):
return self.name
class WorkoutRecord(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
plan = models.ForeignKey(TrainingPlan, on_delete=models.SET_NULL, null=True, blank=True)
date = models.DateField(_("Workout Date"))
notes = models.TextField(_("Notes"), blank=True)
class Meta:
verbose_name_plural = "Workout Records"
def __str__(self):
return f"{self.user.name} - {self.date}"
class SetRecord(models.Model):
workout = models.ForeignKey(WorkoutRecord, related_name="sets", on_delete=models.CASCADE)
exercise = models.ForeignKey(Exercise, on_delete=models.CASCADE)
sets = models.PositiveIntegerField(_("Number of Sets"))
reps = models.PositiveIntegerField(_("Reps per Set"))
weight = models.FloatField(_("Weight (kg)"))
def __str__(self):
return f"{self.exercise.name} - {self.sets}x{self.reps} @ {self.weight}kg"
数据模型关系图:
实现用户界面
自定义模板
项目提供了基础模板结构,位于{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/templates/。我们可以扩展基础模板,创建训练记录页面:
<!-- templates/workout/record.html -->
{% extends "base.html" %}
{% block title %}记录今日训练{% endblock %}
{% block content %}
<div class="container mt-5">
<h2>记录今日训练</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<h3 class="mt-4">训练内容</h3>
{{ set_formset.management_form }}
{% for form in set_formset %}
<div class="set-form">
{{ form.as_table }}
</div>
{% endfor %}
<button type="submit" class="btn btn-primary mt-3">保存记录</button>
</form>
</div>
{% endblock %}
添加静态资源
项目的静态文件位于{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/static/,可以添加自定义CSS美化界面:
/* static/css/fitness.css */
.set-form {
border: 1px solid #ddd;
border-radius: 5px;
padding: 15px;
margin-bottom: 15px;
}
.workout-summary {
background-color: #f8f9fa;
border-radius: 8px;
padding: 20px;
margin-top: 20px;
}
.progress-chart {
height: 300px;
margin: 20px 0;
}
数据可视化
使用Chart.js实现训练数据可视化,在模板中添加:
<!-- 在训练记录页面添加图表 -->
<div class="progress-chart">
<canvas id="weightChart"></canvas>
</div>
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.8/dist/chart.umd.min.js"></script>
<script>
// 从后端获取数据并绘制图表
const ctx = document.getElementById('weightChart').getContext('2d');
const chart = new Chart(ctx, {
type: 'line',
data: {
labels: ['1月', '2月', '3月', '4月', '5月', '6月'],
datasets: [{
label: '体重 (kg)',
data: [75, 73, 71, 70, 68, 67],
borderColor: 'rgb(75, 192, 192)',
tension: 0.1
}]
}
});
</script>
开发与部署
本地开发
使用Django开发服务器运行项目:
# 创建数据库迁移并应用
python manage.py makemigrations
python manage.py migrate
# 创建超级用户
python manage.py createsuperuser
# 启动开发服务器
python manage.py runserver
访问http://127.0.0.1:8000即可看到应用首页,通过http://127.0.0.1:8000/admin进入管理界面。
本地开发文档:docs/2-local-development/developing-locally.rst
部署选项
cookiecutter-django支持多种部署方式,包括Docker容器化部署和云平台部署:
Docker部署
# 构建并启动容器
docker-compose -f docker-compose.local.yml up -d --build
Docker部署文档:docs/3-deployment/deployment-with-docker.rst
生产环境配置
修改config/settings/production.py配置文件,设置ALLOWED_HOSTS、数据库连接和静态文件存储等生产环境参数。
功能扩展建议
高级功能实现
- 训练计划推荐:基于用户历史数据,使用简单的推荐算法推荐训练计划
- 社交功能:添加好友系统,分享训练成果
- 营养跟踪:扩展模型添加饮食记录功能
- 通知系统:使用Celery定时发送训练提醒
Celery配置文档:docs/4-guides/websocket.rst
性能优化
- 添加缓存:使用Django缓存框架缓存常用数据
- 数据库优化:为常用查询添加索引
- 异步任务:使用Celery处理耗时操作如数据统计和邮件发送
总结
本文介绍了如何使用cookiecutter-django快速构建健身追踪应用,包括项目搭建、数据模型设计、界面开发和部署流程。通过扩展用户模型和添加训练记录功能,我们实现了一个基础但完整的健身应用原型。cookiecutter-django提供的最佳实践和预配置功能,大大加速了开发过程,让我们能够专注于业务逻辑而非基础架构。
接下来,你可以继续完善这个应用,添加更多高级功能,或者根据自己的需求调整数据模型和界面设计。祝你健身愉快,代码无bug!
如果觉得本文对你有帮助,请点赞收藏,并关注获取更多Django实战教程。下期我们将介绍如何使用Django REST Framework构建API,实现移动端应用的数据交互。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



