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

الصفحات

كيفية بناء متجر إلكتروني باستخدام Python Django

برمجة متجر إلكتروني بايثون، تطوير متجر Django، متجر بسيط Django، واجهة مستخدم متجر Django، نماذج Django للتجارة الإلكترونية، عرض المنتجات Django، إضافة إلى السلة Django، صفحة الدفع Django، حفظ بيانات الطلبات Django، نشر تطبيقات Django، متجر إلكتروني بسيط باستخدام Python Django، متجر إلكتروني بسيط، Python Django، بناء متجر إلكتروني باستخدام Python Django : دليل شامل، نشر تطبيقات Django، خادم Gunicorn، خادم Nginx، تكوين Nginx لـ Django، جمع الملفات الثابتة Django، نشر Django على Linux، حفظ بيانات الطلبات Django، تخزين بيانات التجارة الإلكترونية Django، Django Admin، إنشاء مستخدم مسؤول Django، إضافة منتجات Django Admin، مسارات URL Django، تعريف مسارات Django، ربط طرق العرض بمسارات URL Django، طرق عرض Django، قائمة المنتجات Django view، إضافة إلى السلة Django view، عرض السلة Django view، إزالة من السلة Django view، صفحة الدفع Django view، معالجة الطلب Django view، قوالب Django، إنشاء قوالب Django، قائمة المنتجات Django HTML، سلة التسوق Django HTML، صفحة الدفع Django HTML، تأكيد الطلب Django HTML، إعداد Django، إنشاء مشروع Django، إنشاء تطبيق Django، نماذج Django، تعريف نماذج Django، نماذج المنتج Django، نماذج الطلب Django، إنشاء تغييرات Django، تنفيذ التغييرات Django، How to Code an Online Store Using Python Django، كيفية بناء متجر إلكتروني باستخدام Python Django، خادم Gunicorn، خادم Nginx، تكوين Nginx لـ Django، نماذج Django، نشر Django على Linux، إنشاء قوالب Django،



كيفية بناء متجر إلكتروني باستخدام Python Django


انطلق في رحلة التجارة الإلكترونية الخاصة بك مع قوة Python Django! 
في هذا الدليل المفصل، سنكشف النقاب عن خطوات بناء متجر إلكتروني بسيط 
ولكنه فعال باستخدام إطار العمل Django الشهير. سواء كنت مطورًا طموحًا أو صاحب 
عمل يسعى لدخول عالم البيع عبر الإنترنت، سيزودك هذا المقال بالمعرفة والأكواد
 اللازمة لتحويل فكرتك إلى واقع رقمي قابل للتشغيل. تابع معنا خطوة بخطوة، من
 الأساسيات وحتى النشر، لتكتشف كيف يمكن لـ Django أن يجعل إنشاء متجرك الإلكتروني
 أمرًا ممكنًا ومجزيًا، سنستعرض خطوات بناء متجر إلكتروني بسيط باستخدام لغة
 البرمجة Python وإطار العمل Django. سنغطي كل شيء بدءًا من تصميم وإنشاء
 واجهة المستخدم، مرورًا بتعريف نماذج البيانات وعرض المنتجات وإدارة سلة التسوق 
وعملية الدفع، وصولًا إلى حفظ بيانات الطلبات ونشر التطبيق.


خطوات بناء متجر إلكتروني باستخدام Python Django


قبل أن نبدأ رحلتنا في بناء هذا المتجر الرقمي، من الضروري تجهيز أدواتنا 
ووضع الأساس المتين الذي سينطلق منه مشروعنا. في هذه الخطوة الأولى، سنقوم
 بإعداد بيئة التطوير الخاصة بنا وتجهيز مشروع Django الجديد الذي سيحتضن متجرنا الإلكتروني. 
هيا بنا نبدأ في تهيئة المسرح لإبداعنا! .

الخطوة 1: إعداد بيئة التطوير وإنشاء مشروع Django
* تأكد من تثبيت Python و pip على جهازك. ثم قم بتثبيت Django:
pip install django

--
* أنشئ مشروع Django جديدًا باسم simple_shop :
django-admin startproject simple_shop
cd simple_shop

--
* أنشئ تطبيقًا داخل المشروع باسم shop :
python manage.py startapp shop

--

الخطوة 2: تعريف نماذج البيانات (Models)

في ملف shop/models.py، سنقوم بتعريف نماذج البيانات الأساسية لمنتجاتنا والطلبات :

        

Python

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=255)
    description = models.TextField()
    price = models.DecimalField(max_digits=10, decimal_places=2)
    image = models.ImageField(upload_to='products/', blank=True, null=True)
    stock = models.IntegerField(default=0)

    def __str__(self):
        return self.name

class Order(models.Model):
    customer_name = models.CharField(max_length=255)
    customer_email = models.EmailField()
    order_date = models.DateTimeField(auto_now_add=True)
    total_amount = models.DecimalField(max_digits=10, decimal_places=2)

    def __str__(self):
        return f"Order #{self.id} - {self.customer_name}"

class OrderItem(models.Model):
    order = models.ForeignKey(Order, related_name='items', on_delete=models.CASCADE)
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    quantity = models.IntegerField(default=1)
    price = models.DecimalField(max_digits=10, decimal_places=2)

    def __str__(self):
        return f"{self.quantity} x {self.product.name} in Order #{self.order.id}"


* أضف تطبيق shop إلى قائمة INSTALLED_APPS في ملف simple_shop/settings.py:
Python

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'shop', # إضافة تطبيق shop هنا
]

--
* قم بإنشاء التغييرات وتنفيذها :

python manage.py makemigrations shop
python manage.py migrate
--

الخطوة 3: إنشاء واجهة المستخدم (Templates)

الآن، بعد أن وضعنا الهيكل الأساسي لمتجرنا من خلال نماذج البيانات، 
حان الوقت لمنحه مظهرًا جذابًا وتفاعليًا. في هذه الخطوة، سنركز على إنشاء
 واجهة المستخدم التي سيتفاعل معها زوار متجرنا. سنستخدم قوالب HTML
 الخاصة بـ Django لتصميم صفحات عرض المنتجات وسلة التسوق وإتمام الدفع،
 مما يمنح المستخدم تجربة تسوق سلسة وممتعة.




* أنشئ مجلدًا باسم templates داخل مجلد تطبيق shop. ثم أنشئ ملفات HTML التالية:

* shop/templates/shop/product_list.html: لعرض قائمة المنتجات :

        

HTML

<!DOCTYPE html>
<html>
<head>
    <title>متجرنا البسيط</title>
</head>
<body>
    <h1>منتجاتنا</h1>
    <ul>
        {% for product in products %}
            <li>
                <h3>{{ product.name }}</h3>
                {% if product.image %}
                    <img src="{{ product.image.url }}" alt="{{ product.name }}" width="100">
                {% endif %}
                <p>{{ product.description }}</p>
                <p>السعر: {{ product.price }}</p>
                <form method="post" action="{% url 'add_to_cart' product.id %}">
                    {% csrf_token %}
                    <button type="submit">أضف إلى السلة</button>
                </form>
            </li>
        {% empty %}
            <li>لا توجد منتجات متاحة حاليًا.</li>
        {% endfor %}
    </ul>
    <p><a href="{% url 'view_cart' %}">عرض السلة</a></p>
</body>
</html>



* shop/templates/shop/cart.html: لعرض سلة التسوق :


        

HTML

<!DOCTYPE html>
<html>
<head>
    <title>سلة التسوق</title>
</head>
<body>
    <h1>سلة التسوق</h1>
    {% if cart_items %}
        <ul>
            {% for item in cart_items %}
                <li>
                    {{ item.product.name }} - الكمية: {{ item.quantity }} - السعر: {{ item.total_price }}
                    <form method="post" action="{% url 'remove_from_cart' item.product.id %}">
                        {% csrf_token %}
                        <button type="submit">إزالة</button>
                    </form>
                </li>
            {% endfor %}
        </ul>
        <p>المجموع الكلي: {{ cart_total }}</p>
        <p><a href="{% url 'checkout' %}">إتمام الدفع</a></p>
    {% else %}
        <p>سلة التسوق فارغة.</p>
    {% endif %}
    <p><a href="{% url 'product_list' %}">العودة إلى قائمة المنتجات</a></p>
</body>
</html>


* shop/templates/shop/checkout.html: لصفحة إتمام الدفع :

        

HTML

<!DOCTYPE html>
<html>
<head>
    <title>إتمام الدفع</title>
</head>
<body>
    <h1>معلومات الدفع</h1>
    <form method="post" action="{% url 'process_order' %}">
        {% csrf_token %}
        <div>
            <label for="customer_name">اسم العميل:</label>
            <input type="text" id="customer_name" name="customer_name" required>
        </div>
        <div>
            <label for="customer_email">البريد الإلكتروني:</label>
            <input type="email" id="customer_email" name="customer_email" required>
        </div>
        <button type="submit">تأكيد الطلب</button>
    </form>
    <p><a href="{% url 'view_cart' %}">العودة إلى السلة</a></p>
</body>
</html>


* shop/templates/shop/order_confirmation.html: لتأكيد الطلب :

HTML

<!DOCTYPE html>
<html>
<head>
    <title>تأكيد الطلب</title>
</head>
<body>
    <h1>تم تأكيد طلبك!</h1>
    <p>شكراً لك {{ customer_name }}، تم استلام طلبك بنجاح.</p>
    <p>رقم الطلب: {{ order_id }}</p>
    <p><a href="{% url 'product_list' %}">العودة إلى صفحة المنتجات الرئيسية</a></p>
</body>
</html>

--

الخطوة 4: إنشاء طرق العرض (Views)

في ملف shop/views.py، سنقوم بإنشاء طرق العرض التي 
تتحكم في منطق التطبيق وتعرض القوالب:

        

Python

from django.shortcuts import render, redirect, get_object_or_404
from .models import Product, Order, OrderItem
from django.conf import settings

def product_list(request):
    products = Product.objects.all()
    context = {'products': products}
    return render(request, 'shop/product_list.html', context)

def add_to_cart(request, product_id):
    product = get_object_or_404(Product, id=product_id)
    cart = request.session.get('cart', {})
    if product_id in cart:
        cart[product_id]['quantity'] += 1
        cart[product_id]['total_price'] = cart[product_id]['quantity'] * float(product.price)
    else:
        cart[product_id] = {'quantity': 1, 'price': float(product.price), 'total_price': float(product.price)}
    request.session['cart'] = cart
    return redirect('view_cart')

def view_cart(request):
    cart = request.session.get('cart', {})
    cart_items = []
    cart_total = 0
    for product_id, item_data in cart.items():
        product = get_object_or_404(Product, id=product_id)
        cart_items.append({'product': product, 'quantity': item_data['quantity'], 'total_price': item_data['total_price']})
        cart_total += item_data['total_price']
    context = {'cart_items': cart_items, 'cart_total': cart_total}
    return render(request, 'shop/cart.html', context)

def remove_from_cart(request, product_id):
    cart = request.session.get('cart', {})
    if product_id in cart:
        del cart[product_id]
        request.session['cart'] = cart
    return redirect('view_cart')

def checkout(request):
    cart = request.session.get('cart', {})
    if not cart:
        return redirect('product_list')
    cart_items = []
    cart_total = 0
    for product_id, item_data in cart.items():
        product = get_object_or_404(Product, id=product_id)
        cart_items.append({'product': product, 'quantity': item_data['quantity'], 'price': product.price})
        cart_total += item_data['quantity'] * product.price
    context = {'cart_items': cart_items, 'cart_total': cart_total}
    return render(request, 'shop/checkout.html', context)

def process_order(request):
    cart = request.session.get('cart', {})
    if request.method == 'POST' and cart:
        customer_name = request.POST['customer_name']
        customer_email = request.POST['customer_email']
        total_amount = 0
        order = Order.objects.create(customer_name=customer_name, customer_email=customer_email, total_amount=total_amount)
        for product_id, item_data in cart.items():
            product = get_object_or_404(Product, id=product_id)
            quantity = item_data['quantity']
            price = product.price
            OrderItem.objects.create(order=order, product=product, quantity=quantity, price=price)
            total_amount += quantity * price
            product.stock -= quantity
            product.save()
        order.total_amount = total_amount
        order.save()
        request.session['cart'] = {} # Clear the cart
        return render(request, 'shop/order_confirmation.html', {'customer_name': customer_name, 'order_id': order.id})
    else:
        return redirect('view_cart')


الخطوة 5: تعريف مسارات URL (URLs)

في ملف shop/urls.py (إذا لم يكن موجودًا، قم بإنشائه):
Python

from django.urls import path
from . import views

urlpatterns = [
    path('', views.product_list, name='product_list'),
    path('add_to_cart/<int:product_id>/', views.add_to_cart, name='add_to_cart'),
    path('cart/', views.view_cart, name='view_cart'),
    path('remove_from_cart/<int:product_id>/', views.remove_from_cart, name='remove_from_cart'),
    path('checkout/', views.checkout, name='checkout'),
    path('process_order/', views.process_order, name='process_order'),
]

--

* قم بتضمين مسارات تطبيق shop في ملف simple_shop/urls.py:
Python

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('shop.urls')), # تضمين مسارات تطبيق shop
]

--

الخطوة 6: إضافة بعض المنتجات الأولية (اختياري)

يمكنك استخدام Django Admin لإضافة بعض المنتجات الأولية إلى قاعدة البيانات.




 قم بإنشاء مستخدم مسؤول:
python manage.py createsuperuser

* ثم قم بتشغيل خادم التطوير :
python manage.py runserver

* قم بزيارة http://127.0.0.1:8000/admin/ وقم بتسجيل الدخول لإضافة المنتجات.

الخطوة 7: حفظ النقاط (بيانات الطلبات)

لقد قمنا بالفعل بحفظ بيانات الطلبات في قاعدة البيانات في طريقة العرض
 process_order في ملف shop/views.py. يتم إنشاء سجلات جديدة
 في نماذج Order و OrderItem لتخزين معلومات كل طلب.

الخطوة 8: نشر التطبيق

لنشر تطبيق Django، هناك العديد من الخيارات المتاحة. 
إليك خطوات عامة باستخدام Gunicorn كخادم WSGI و Nginx كخادم ويب على خادم Linux:
* تثبيت Gunicorn :
pip install gunicorn
--

* اختبار Gunicorn :
gunicorn simple_shop.wsgi:application
--

* تثبيت Nginx :
sudo apt update
sudo apt install nginx
--

* تكوين Nginx: قم بإنشاء ملف تكوين جديد لموقعك في
 /etc/nginx/sites-available/your_site:
Nginx

server {
    listen 80;
    server_name your_domain.com; # استبدل باسم نطاقك

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /path/to/your/project/staticfiles; # استبدل بالمسار إلى مجلد static
    }

    location / {
        include proxy_params;
        proxy_pass http://127.0.0.1:8000; # نفس المنفذ الذي يعمل عليه Gunicorn
    }
}
--

* قم بإنشاء رابط رمزي للملف في /etc/nginx/sites-enabled/ و
قم بإعادة تشغيل Nginx:

sudo ln -s /etc/nginx/sites-available/your_site /etc/nginx/sites-enabled/
sudo systemctl restart nginx
--

* تكوين Django للملفات الثابتة: في simple_shop/settings.py:
Python

import os

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
--

* ثم قم بجمع الملفات الثابتة  :
python manage.py collectstatic
--

إعداد نظام إدارة العمليات (مثل Systemd) لتشغيل Gunicorn تلقائيًا.

* ملاحظات هامة للنشر :

استبدل your_domain.com باسم النطاق الخاص بك والمسارات الصحيحة في تكوين Nginx.
تأكد من إعداد جدار حماية للسماح لحركة المرور على المنفذ 80 (HTTP) و 443 (HTTPS إذا قمت بتكوين SSL).
فكر في استخدام بيئة افتراضية (virtual environment) على خادم الإنتاج.
لتأمين موقعك، قم بتكوين HTTPS باستخدام Let's Encrypt أو شهادة SSL أخرى.
هذه مجرد خطوات عامة، وقد تختلف عملية النشر بناءً على مزود الاستضافة ونظام التشغيل الذي تستخدمه. 
ابحث عن دليل النشر الخاص ببيئتك للحصول على تعليمات أكثر تفصيلاً.

الخلاصة
لقد قمنا من خلال الخطوات الأساسية ببناء متجر إلكتروني بسيط باستخدام Python Django. 
بدءًا من إعداد المشروع وتعريف نماذج البيانات، مرورًا بإنشاء واجهة 
المستخدم وطرق العرض والمسارات، وصولًا إلى حفظ بيانات الطلبات ونشر التطبيق. 
يمكنك الآن توسيع هذا المتجر بإضافة المزيد من الميزات مثل إدارة المستخدمين، 
وأنظمة الدفع المتنوعة، وتصنيفات المنتجات، ولوحة إدارة متقدمة.
 Django يوفر لك إطار عمل قويًا ومرنًا لبناء تطبيقات ويب تجارية إلكترونية متكاملة.



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