30分钟搭建你的专属健身追踪应用:cookiecutter-django实战指南

30分钟搭建你的专属健身追踪应用:cookiecutter-django实战指南

【免费下载链接】cookiecutter-django cookiecutter/cookiecutter-django: cookiecutter-django 是一个基于Cookiecutter项目的模板,用来快速生成遵循最佳实践的Django项目结构,包括了众多预配置的功能,如数据库迁移、静态文件处理、权限认证等。 【免费下载链接】cookiecutter-django 项目地址: https://gitcode.com/GitHub_Trending/co/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"

数据模型关系图:

mermaid

实现用户界面

自定义模板

项目提供了基础模板结构,位于{{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、数据库连接和静态文件存储等生产环境参数。

功能扩展建议

高级功能实现

  1. 训练计划推荐:基于用户历史数据,使用简单的推荐算法推荐训练计划
  2. 社交功能:添加好友系统,分享训练成果
  3. 营养跟踪:扩展模型添加饮食记录功能
  4. 通知系统:使用Celery定时发送训练提醒

Celery配置文档:docs/4-guides/websocket.rst

性能优化

  1. 添加缓存:使用Django缓存框架缓存常用数据
  2. 数据库优化:为常用查询添加索引
  3. 异步任务:使用Celery处理耗时操作如数据统计和邮件发送

总结

本文介绍了如何使用cookiecutter-django快速构建健身追踪应用,包括项目搭建、数据模型设计、界面开发和部署流程。通过扩展用户模型和添加训练记录功能,我们实现了一个基础但完整的健身应用原型。cookiecutter-django提供的最佳实践和预配置功能,大大加速了开发过程,让我们能够专注于业务逻辑而非基础架构。

接下来,你可以继续完善这个应用,添加更多高级功能,或者根据自己的需求调整数据模型和界面设计。祝你健身愉快,代码无bug!

如果觉得本文对你有帮助,请点赞收藏,并关注获取更多Django实战教程。下期我们将介绍如何使用Django REST Framework构建API,实现移动端应用的数据交互。

【免费下载链接】cookiecutter-django cookiecutter/cookiecutter-django: cookiecutter-django 是一个基于Cookiecutter项目的模板,用来快速生成遵循最佳实践的Django项目结构,包括了众多预配置的功能,如数据库迁移、静态文件处理、权限认证等。 【免费下载链接】cookiecutter-django 项目地址: https://gitcode.com/GitHub_Trending/co/cookiecutter-django

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值