
كيفية برمجة موقع لحجز المواعيد باستخدام Python Django
في هذا الدليل الشامل، سنستعرض خطوات بناء موقع بسيط لحجز المواعيد
باستخدام لغة البرمجة Python وإطار العمل Django.
سنغطي كل شيء بدءًا من تصميم وإنشاء واجهة المستخدم لعرض الخدمات والمواعيد المتاحة،
مرورًا بتعريف نماذج البيانات لتخزين معلومات الخدمات والمواعيد والحجوزات،
وصولًا إلى حفظ هذه البيانات ونشر التطبيق.
خطوات برمجة موقع لحجز المواعيد باستخدام Python Django
الخطوة 1: إعداد بيئة التطوير وإنشاء مشروع Django
*تأكد من تثبيت Python و pip على جهازك. ثم قم بتثبيت Django:
pip install django
--
* أنشئ مشروع Django جديدًا باسم appointment_booking_site :
django-admin startproject appointment_booking_site
cd appointment_booking_site
--
* أنشئ تطبيقًا داخل المشروع باسم booking :
python manage.py startapp booking
--
الخطوة 2: تعريف نماذج البيانات (Models)
في ملف booking/models.py، سنقوم بتعريف نماذج البيانات الأساسية
للخدمات والمواعيد والحجوزات :
Python
from django.db import modelsfrom django.utils import timezone
class Service(models.Model): name = models.CharField(max_length=255) description = models.TextField(blank=True, null=True) duration_minutes = models.IntegerField(default=30)
def __str__(self): return self.name
class AppointmentSlot(models.Model): service = models.ForeignKey(Service, on_delete=models.CASCADE) start_time = models.DateTimeField() end_time = models.DateTimeField() is_available = models.BooleanField(default=True)
def __str__(self): return f"{self.service.name} - {self.start_time.strftime('%Y-%m-%d %H:%M')}"
class Booking(models.Model): service = models.ForeignKey(Service, on_delete=models.CASCADE) appointment_slot = models.ForeignKey(AppointmentSlot, on_delete=models.CASCADE) customer_name = models.CharField(max_length=255) customer_email = models.EmailField() booking_date = models.DateTimeField(auto_now_add=True)
class Meta: unique_together = ('appointment_slot',) # منع حجز نفس الموعد مرتين
def __str__(self): return f"Booking for {self.customer_name} - {self.service.name} at {self.appointment_slot.start_time.strftime('%Y-%m-%d %H:%M')}"
* أضف تطبيق booking إلى قائمة INSTALLED_APPS في ملف
appointment_booking_site/settings.py :
Python
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'booking', # إضافة تطبيق booking هنا
]
--
* قم بإنشاء التغييرات وتنفيذها :
python manage.py makemigrations booking
python manage.py migrate
--
الخطوة 3: إنشاء واجهة المستخدم (Templates)
أنشئ مجلدًا باسم templates داخل مجلد تطبيق booking.
ثم أنشئ ملفات HTML التالية:
* booking/templates/booking/service_list.html:
لعرض قائمة الخدمات :
HTML
<!DOCTYPE html>
<html>
<head>
<title>حجز موعد</title>
</head>
<body>
<h1>اختر الخدمة</h1>
<ul>
{% for service in services %}
<li><a href="{% url 'available_slots' service.id %}">{{ service.name }}</a> - المدة: {{ service.duration_minutes }} دقيقة</li>
{% empty %}
<li>لا توجد خدمات متاحة حاليًا.</li>
{% endfor %}
</ul>
</body>
</html>
--
* booking/templates/booking/available_slots.html:
لعرض المواعيد المتاحة لخدمة معينة :
HTML
<!DOCTYPE html>
<html>
<head>
<title>المواعيد المتاحة لـ {{ service.name }}</title>
</head>
<body>
<h1>المواعيد المتاحة لـ {{ service.name }}</h1>
{% if available_slots %}
<ul>
{% for slot in available_slots %}
<li>
{{ slot.start_time.strftime('%Y-%m-%d %H:%M') }} - {{ slot.end_time.strftime('%H:%M') }}
<form method="post" action="{% url 'book_appointment' slot.id %}">
{% csrf_token %}
<button type="submit">حجز هذا الموعد</button>
</form>
</li>
{% endfor %}
</ul>
{% else %}
<p>لا توجد مواعيد متاحة لهذه الخدمة حاليًا.</p>
{% endif %}
<p><a href="{% url 'service_list' %}">العودة إلى قائمة الخدمات</a></p>
</body>
</html>
--
* booking/templates/booking/booking_form.html:
لنموذج حجز الموعد :
HTML
<!DOCTYPE html>
<html>
<head>
<title>تأكيد الحجز</title>
</head>
<body>
<h1>تأكيد الحجز</h1>
<p>الخدمة المختارة: {{ service.name }}</p>
<p>الموعد المحدد: {{ appointment_slot.start_time.strftime('%Y-%m-%d %H:%M') }} - {{ appointment_slot.end_time.strftime('%H:%M') }}</p>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">تأكيد الحجز</button>
</form>
<p><a href="{% url 'available_slots' service.id %}">العودة إلى المواعيد المتاحة</a></p>
</body>
</html>
--
* booking/templates/booking/booking_confirmation.html :
لتأكيد الحجز :
HTML
<!DOCTYPE html>
<html>
<head>
<title>تم تأكيد الحجز</title>
</head>
<body>
<h1>تم تأكيد حجزك!</h1>
<p>شكراً لك {{ customer_name }}، تم حجز موعدك بنجاح لخدمة {{ service_name }} في {{ appointment_time }}.</p>
<p><a href="{% url 'service_list' %}">العودة إلى صفحة الخدمات الرئيسية</a></p>
</body>
</html>
--
الخطوة 4: إنشاء النماذج (Forms)
في ملف booking/forms.py (إذا لم يكن موجودًا، قم بإنشائه) :
Python
from django import forms
from .models import Booking
class BookingForm(forms.ModelForm):
class Meta:
model = Booking
fields = ['customer_name', 'customer_email']
--
الخطوة 5: إنشاء طرق العرض (Views)
في ملف booking/views.py، سنقوم بإنشاء طرق العرض التي
تتحكم في منطق التطبيق وتعرض القوالب :
Python
from django.shortcuts import render, redirect, get_object_or_404from .models import Service, AppointmentSlot, Bookingfrom .forms import BookingFormfrom django.utils import timezone
def service_list(request): services = Service.objects.all() context = {'services': services} return render(request, 'booking/service_list.html', context)
def available_slots(request, service_id): service = get_object_or_404(Service, id=service_id) now = timezone.now() available_slots = AppointmentSlot.objects.filter(service=service, start_time__gte=now, is_available=True).order_by('start_time') context = {'service': service, 'available_slots': available_slots} return render(request, 'booking/available_slots.html', context)
def book_appointment(request, slot_id): appointment_slot = get_object_or_404(AppointmentSlot, id=slot_id) service = appointment_slot.service if request.method == 'POST': form = BookingForm(request.POST) if form.is_valid(): booking = form.save(commit=False) booking.service = service booking.appointment_slot = appointment_slot booking.save() appointment_slot.is_available = False appointment_slot.save() return render(request, 'booking/booking_confirmation.html', { 'customer_name': booking.customer_name, 'service_name': service.name, 'appointment_time': appointment_slot.start_time.strftime('%Y-%m-%d %H:%M') }) else: form = BookingForm() context = {'form': form, 'service': service, 'appointment_slot': appointment_slot} return render(request, 'booking/booking_form.html', context)
الخطوة 6: تعريف مسارات URL (URLs)
في ملف booking/urls.py (إذا لم يكن موجودًا، قم بإنشائه) :
Python
from django.urls import path
from . import views
urlpatterns = [
path('', views.service_list, name='service_list'),
path('service/<int:service_id>/', views.available_slots, name='available_slots'),
path('book/<int:slot_id>/', views.book_appointment, name='book_appointment'),
]
--
* قم بتضمين مسارات تطبيق booking في ملف
appointment_booking_site/urls.py :
Python
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('booking.urls')), # تضمين مسارات تطبيق booking
]
--
الخطوة 7: إضافة بعض البيانات الأولية (اختياري)
يمكنك استخدام Django Admin لإضافة بعض الخدمات والمواعيد الأولية إلى قاعدة البيانات.
قم بإنشاء مستخدم مسؤول :
python manage.py createsuperuser
--
* ثم قم بتشغيل خادم التطوير :
python manage.py runserver
--
قم بزيارة http://127.0.0.1:8000/admin/ وقم بتسجيل الدخول لإضافة الخدمات والمواعيد المتاحة.
الخطوة 8: حفظ النقاط (بيانات الحجوزات)
لقد قمنا بالفعل بحفظ بيانات الحجوزات في قاعدة البيانات في
طريقة العرض book_appointment في ملف booking/views.py.
يتم إنشاء سجل جديد في نموذج Booking لتخزين معلومات الحجز، ويتم تحديث
حالة الموعد في نموذج AppointmentSlot ليصبح غير متاح.
الخطوة 9: نشر التطبيق
لنشر تطبيق Django، يمكنك اتباع نفس الخطوات العامة المذكورة في
قسم النشر في مثال المتجر الإلكتروني البسيط (باستخدام Gunicorn و
Nginx أو أي خادم ويب و WSGI آخر تفضله). تأكد من تكوين خادم الويب الخاص بك
لخدمة الملفات الثابتة التي تم جمعها بواسطة python manage.py collectstatic.
الخلاصة
لقد قمنا خلال الخطوات الأساسية لبناء موقع بسيط لحجز المواعيد باستخدام Python Django.
بدءًا من إعداد المشروع وتعريف نماذج البيانات، مرورًا بإنشاء واجهة المستخدم
والنماذج وطرق العرض والمسارات، وصولًا إلى حفظ بيانات الحجوزات ونشر التطبيق.
يمكنك الآن توسيع هذا النظام بإضافة المزيد من الميزات مثل إدارة المستخدمين،
وتأكيدات البريد الإلكتروني، وتقويم المواعيد، ولوحة إدارة متقدمة.
Django يوفر لك إطار عمل قويًا لبناء أنظمة حجز مواعيد ديناميكية وسهلة الاستخدام.