
طريقة برمجة تطبيق تتبع الوزن واللياقة باستخدام Python Django
في عالم تتبع الصحة واللياقة، يعتبر تطبيق تتبع الوزن واللياقة باستخدام Python Django
من المشاريع العملية والمفيدة للمطورين المبتدئين والمتقدمين.
هذا النوع من التطبيقات يساعد المستخدم على تسجيل وزنه اليومي، متابعة تقدمه،
ورؤية التغييرات عبر الوقت من خلال لوحة تحكم تفاعلية.
في هذا الدليل، سنقوم ببرمجة تطبيق كامل باستخدام دجانغو Django، بدءًا من تصميم
الواجهة وحتى تخزين البيانات وعرضها بيانيًا.
التطبيق سيسمح للمستخدم بإدخال وزنه بشكل يومي، وعرض رسومات بيانية لتقدمه، مع واجهة مستخدم بسيطة.
خطوات برمجة تطبيق تتبع الوزن واللياقة باستخدام Python Django
في هذا الجزء من المقال، سنتناول خطوات تطوير تطبيق تتبع الوزن خطوة
بخطوة باستخدام دجانغو Django. ستبدأ من إعداد المشروع وإنشاء نماذج
البيانات، ثم ننتقل إلى بناء النماذج والواجهات، وعرض بيانات المستخدم عب
ر الرسوم البيانية التفاعلية. هذا الشرح مفيد لأي شخص يريد بناء تطبيق لياقة أو
تتبع صحي باستخدام Python Django مع واجهة مستخدم سهلة.
الخطوة 1: إنشاء المشروع
django-admin startproject fitness_tracker
cd fitness_tracker
python manage.py startapp tracker
* ثم نضيف tracker إلى INSTALLED_APPS في settings.py.
الخطوة 2: إنشاء نموذج البيانات (Model)
# tracker/models.py
from django.db import models
from django.utils import timezone
class WeightEntry(models.Model):
date = models.DateField(default=timezone.now)
weight = models.FloatField()
def __str__(self):
return f"{self.date} - {self.weight} kg"
--
* ثم :
python manage.py makemigrations
python manage.py migrate
--
الخطوة 3: إنشاء نموذج إدخال الوزن (Form)
python
# tracker/forms.py
from django import forms
from .models import WeightEntry
class WeightEntryForm(forms.ModelForm):
class Meta:
model = WeightEntry
fields = ['date', 'weight']
--
الخطوة 4: إنشاء الواجهات (Views)
python
# tracker/views.py
from django.shortcuts import render, redirect
from .forms import WeightEntryForm
from .models import WeightEntry
def index(request):
entries = WeightEntry.objects.order_by('-date')
form = WeightEntryForm(request.POST or None)
if request.method == "POST" and form.is_valid():
form.save()
return redirect('index')
return render(request, 'tracker/index.html', {'form': form, 'entries': entries})
--
الخطوة 5: إعداد العناوين (URLs)
python
# tracker/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
--
* ولا تنسَ ربطها في fitness_tracker/urls.py :
python
path('', include('tracker.urls')),
--
الخطوة 6: تصميم الواجهة (HTML Template)
html
<!-- tracker/templates/tracker/index.html -->
<!DOCTYPE html>
<html>
<head>
<title>تتبع الوزن</title>
</head>
<body>
<h1>📉 تتبع الوزن</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">إضافة</button>
</form>
<h2>السجل:</h2>
<ul>
{% for entry in entries %}
<li>{{ entry.date }} - {{ entry.weight }} كجم</li>
{% endfor %}
</ul>
</body>
</html>
--
الخطوة 7: إضافة رسم بياني باستخدام Chart.js
أضف إلى نفس الصفحة:
html
<canvas id="weightChart"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
const labels = [{% for entry in entries reversed %}"{{ entry.date }}",{% endfor %}];
const data = [{% for entry in entries reversed %}{{ entry.weight }},{% endfor %}];
new Chart(document.getElementById("weightChart"), {
type: 'line',
data: {
labels: labels,
datasets: [{
label: 'الوزن',
data: data,
borderColor: 'green',
fill: false
}]
}
});
</script>
--
الخطوة 8: نشر التطبيق
أنشئ حساب على PythonAnywhere أو Render،
ارفع المشروع هناك، فعل إعدادات قواعد البيانات و static files،
اضبط إعدادات ALLOWED_HOSTS و DEBUG=False.
ميزات اضافية لبرمجة تطبيق تتبع الوزن أو اللياقة باستخدام python
1. تسجيل دخول المستخدمين (Authentication)
لكي يكون لكل مستخدم سجله الخاص:
python manage.py startapp accounts
--
استخدم django.contrib.auth لإنشاء نظام تسجيل وتسجيل دخول بسيط.
2. حساب معدل التغير في الوزن + رسالة تشجيعية
* تعديل View:
python
from django.db.models import Ffrom .models import WeightEntry
def index(request): entries = WeightEntry.objects.order_by('-date') message = ""
if len(entries) >= 2: last = entries[0] previous = entries[1] diff = last.weight - previous.weight
if diff < 0: message = f"أحسنت! لقد خسرت {abs(diff):.1f} كجم منذ آخر مرة 👏" elif diff > 0: message = f"لقد اكتسبت {diff:.1f} كجم، لا بأس، استمر بالمحاولة!" else: message = "وزنك ثابت، حافظ على روتينك 💪"
form = WeightEntryForm(request.POST or None) if request.method == "POST" and form.is_valid(): form.save() return redirect('index')
return render(request, 'tracker/index.html', {'form': form, 'entries': entries, 'message': message})
--
* تعديل القالب (HTML):
html
{% if message %}
<p style="color: green;">{{ message }}</p>
{% endif %}
--
3. تحديد أهداف شخصية
* إنشاء نموذج هدف :
python
# models.py
class Goal(models.Model):
target_weight = models.FloatField()
deadline = models.DateField()
--
* نموذج إدخال الهدف :
python
# forms.py
class GoalForm(forms.ModelForm):
class Meta:
model = Goal
fields = ['target_weight', 'deadline']
--
* عرض التقدم في view :
python
from .models import Goalfrom datetime import date
def index(request): # الكود السابق... goal = Goal.objects.last() progress = None
if goal and entries: current = entries[0].weight total = current - goal.target_weight days_left = (goal.deadline - date.today()).days progress = f"الوزن المتبقي: {abs(total):.1f} كجم، الوقت المتبقي: {days_left} يومًا"
return render(request, 'tracker/index.html', { 'form': form, 'entries': entries, 'message': message, 'goal': goal, 'progress': progress, })
--
* عرض الهدف في HTML :
html
{% if progress %}
<p style="color: blue;">🎯 {{ progress }}</p>
{% endif %}
--
4. إشعارات أو تذكير يومي عبر البريد الإلكتروني
* إعداد البريد :
في settings.py:
python
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.yourprovider.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'you@example.com'
EMAIL_HOST_PASSWORD = 'yourpassword'
--
* ملف مهمة مخصصة :
python
# tracker/tasks.py
from django.core.mail import send_mail
from django.contrib.auth.models import User
def send_daily_reminders():
users = User.objects.all()
for user in users:
send_mail(
'تذكير بتحديث وزنك',
'لا تنسَ تسجيل وزنك اليوم في تطبيق تتبع الوزن!',
'noreply@yourapp.com',
[user.email],
fail_silently=False,
)
--
* ربطها بجدولة تلقائية (مثل CRON أو Celery + periodic tasks)
* ربط التذكير اليومي بالبريد الإلكتروني باستخدام Celery و django-celery-beat.
1. ربط التذكير اليومي بالبريد الإلكتروني باستخدام Celery و django-celery-beat
* تثبيت الحزم المطلوبة:
pip install celery django-celery-beat redis
--
* إعداد Celery في مشروع Django :
* project/celery.py
python
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
app = Celery('project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
--
* project/__init__.py
python
from .celery import app as celery_app
__all__ = ['celery_app']
--
* إعدادات Celery في settings.py :
python
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
--
* إنشاء مهمة التذكير :
* tracker/tasks.py
python
from celery import shared_task
from django.core.mail import send_mail
from django.contrib.auth.models import User
@shared_task
def send_daily_reminders():
users = User.objects.all()
for user in users:
send_mail(
'تذكير بتحديث وزنك',
'لا تنسَ تسجيل وزنك اليوم في تطبيق تتبع الوزن!',
'noreply@yourapp.com',
[user.email],
fail_silently=False,
)
--
* جدولة المهمة باستخدام django-celery-beat:
أضف 'django_celery_beat' إلى INSTALLED_APPS في settings.py.
* شغّل الترحيلات:
python manage.py migrate
--
* في لوحة تحكم Django Admin:
انتقل إلى Periodic Tasks.
أنشئ مهمة جديدة:
الاسم: إرسال التذكير اليومي
المهمة: tracker.tasks.send_daily_reminders
الجدول: اختر Interval وحدد كل 24 ساعة أو حسب الرغبة.
2. إضافة سجل للتمارين اليومية والسعرات الحرارية
* نموذج البيانات :
* tracker/models.py
python
from django.db import models
from django.utils import timezone
class WeightEntry(models.Model):
date = models.DateField(default=timezone.now)
weight = models.FloatField()
def __str__(self):
return f"{self.date} - {self.weight} kg"
--
* نموذج الإدخال:
* tracker/forms.py
python
from django import forms
from .models import Exercise
class ExerciseForm(forms.ModelForm):
class Meta:
model = Exercise
fields = ['name', 'duration', 'calories_burned']
--
* العرض في الواجهة:
* tracker/views.py
python
from django.shortcuts import render, redirectfrom .forms import ExerciseFormfrom .models import Exercise
def exercise_log(request): if request.method == 'POST': form = ExerciseForm(request.POST) if form.is_valid(): exercise = form.save(commit=False) exercise.user = request.user exercise.save() return redirect('exercise_log') else: form = ExerciseForm() exercises = Exercise.objects.filter(user=request.user).order_by('-date') return render(request, 'tracker/exercise_log.html', {'form': form, 'exercises': exercises})
--
* القالب (HTML) :
tracker/templates/tracker/exercise_log.html
html
<h2>سجل التمارين اليومية</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">إضافة تمرين</button>
</form>
<h3>التمارين السابقة</h3>
<ul>
{% for exercise in exercises %}
<li>{{ exercise.date }}: {{ exercise.name }} - {{ exercise.duration }} دقيقة - {{ exercise.calories_burned }} سعر حراري</li>
{% endfor %}
</ul>
--
3. ربط التطبيق بواجهة API مثل Fitbit أو Google Fit
* إعداد OAuth2:
استخدم مكتبة مثل requests-oauthlib للتعامل مع OAuth2.
سجل تطبيقك في منصة Fitbit أو Google للحصول على client_id و client_secret.
* مثال على استيراد البيانات:
* tracker/views.py
python
import requests
from django.shortcuts import redirect
def fetch_fitbit_data(request):
access_token = request.user.profile.fitbit_access_token
headers = {'Authorization': f'Bearer {access_token}'}
response = requests.get('https://api.fitbit.com/1/user/-/activities/date/today.json', headers=headers)
data = response.json()
# معالجة البيانات وتخزينها في قاعدة البيانات
return redirect('dashboard')
--
* ملاحظة: تأكد من تخزين access_token و refresh_token بأمان وتحديثها عند الحاجة.
4. تفعيل الوضع الليلي وتصميم متجاوب للجوال
* استخدام Bootstrap:
أضف Bootstrap إلى القوالب الخاصة بك لتحسين التصميم وجعله متجاوبًا.
* base.html
html
<!DOCTYPE html>
<html lang="ar">
<head>
<!-- ... -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
<!-- ... -->
</head>
<body class="bg-light text-dark">
<!-- محتوى الصفحة -->
</body>
</html>
--
* تفعيل الوضع الليلي:
أضف زرًا لتبديل الوضع الليلي :
* base.html
html
<button id="toggle-theme">تبديل الوضع</button>
<script>
document.getElementById('toggle-theme').addEventListener('click', function() {
document.body.classList.toggle('bg-dark');
document.body.classList.toggle('text-light');
});
</script>
--
*خاتمة :
بذلك نكون قد أنشأنا تطبيقًا متكاملًا لتتبع الوزن باستخدام دجانغو Django.
تعلمت كيف تُنشئ قاعدة بيانات، تصمم الواجهات، وتتفاعل مع المستخدم
من خلال الرسوم البيانية. هذا المشروع يمكنك تطويره بإضافة ميزات
مثل حساب السعرات، تحليل الوزن، أو دعم تسجيل دخول المستخدمين.
إذا كنت تبحث عن فكرة مشروع عملي في بايثون، فهذا التطبيق مثال ممتاز
يجمع بين الصحة والبرمجة في تجربة واحدة مفيدة.
هذا المشروع هو بداية رائعة لأي مطور يرغب في إنشاء تطبيق تتبع صحي أو رياضي
باستخدام دجانغو Django. يمكنك تطويره أكثر بإضافة المستخدمين، وإحصائيات متقدمة، وتذكيرات يومية!