القائمة الرئيسية

الصفحات

كيفية برمجة موقع لحجز المواعيد باستخدام Python Django

How-to-Code-Appointment-Booking-Website-in-Python-Django، نشر تطبيقات Django، خادم Gunicorn، خادم Nginx، تكوين Nginx لـ Django، جمع الملفات الثابتة Django، نشر Django على Linux، حفظ بيانات الحجوزات Django، تخزين بيانات المواعيد Django، Django Admin، إنشاء مستخدم مسؤول Django، إضافة خدمات Django Admin، إضافة مواعيد Django Admin، مسارات URL Django، تعريف مسارات Django، ربط طرق العرض بمسارات URL Django، طرق عرض Django، قائمة الخدمات Django view، المواعيد المتاحة Django view، حجز موعد Django view، نماذج Django، إنشاء نماذج Django، نموذج الحجز Django، قوالب Django، إنشاء قوالب Django، قائمة الخدمات Django HTML، المواعيد المتاحة Django HTML، نموذج الحجز Django HTML، تأكيد الحجز Django HTML، نماذج Django، تعريف نماذج Django، نماذج الخدمات Django، نماذج المواعيد Django، نماذج الحجوزات Django، إنشاء تغييرات Django، تنفيذ التغييرات Django، إعداد Django، إنشاء مشروع Django، إنشاء تطبيق Django، برمجة موقع حجز مواعيد بايثون، تطوير نظام حجز Django، موقع حجز بسيط Django، واجهة مستخدم حجز مواعيد Django، نماذج Django للمواعيد والخدمات، عرض المواعيد المتاحة Django، حجز موعد Django، حفظ بيانات الحجوزات Django، نشر تطبيقات Django للحجوزات، برمجة موقع لحجز المواعيد باستخدام Python Django، موقع لحجز المواعيد، طريقة برمجة تطبيق، python django، كيفية برمجة تطبيق، برمجة موقع لحجز المواعيد باستخدام Python Django، كيفية برمجة موقع لحجز المواعيد باستخدام Python Django، برمجة موقع حجز مواعيد بايثون، نشر تطبيقات Django، خادم Gunicorn، خادم Nginx، تكوين Nginx لـ Django، How to Code Appointment Booking Website in Python Django،
 


كيفية برمجة موقع لحجز المواعيد باستخدام 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 models
from 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_404
from .models import Service, AppointmentSlot, Booking
from .forms import BookingForm
from 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 يوفر لك إطار عمل قويًا لبناء أنظمة حجز مواعيد ديناميكية وسهلة الاستخدام.


جدول المحتويات