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

الصفحات

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

How-to-code-classifieds-website-in-Python-Django، How to code classifieds website in Python Django، موقع إعلانات مبوبة، Python Django، برمجة موقع إعلانات مبوبة باستخدام Python، برمجة موقع إعلانات مبوبة احترافي باستخدام Python Django، برمجة موقع إعلانات مبوبة Python، تطوير سوق إعلانات Django، إنشاء موقع تصنيفات مبوبة Python، واجهة مستخدم إعلانات مبوبة Django، نماذج Django للإعلانات والفئات والمستخدمين، عرض الإعلانات وتفاصيلها Django، إضافة إعلانات جديدة Django، حفظ بيانات الإعلانات Django، البحث عن الإعلانات وتصفيتها Django، نظام مستخدمين Django، مصادقة المستخدم Django، نشر تطبيق إعلانات مبوبة Django، إعداد Django لموقع إعلانات، إنشاء مشروع Django للإعلانات، نماذج Django للإعلانات، نماذج Django للفئات، نماذج Django لصور الإعلانات، علاقات Django ForeignKey و ManyToMany، قوالب Django لعرض الإعلانات، نماذج Django Forms لإضافة الإعلانات، طرق عرض Django لعرض الإعلانات وتفاصيلها وإضافتها، مسارات URL Django لموقع الإعلانات، Django Admin لإدارة الإعلانات والفئات، تخزين الصور Django، تحسين محركات البحث SEO لموقع الإعلانات، نشر تطبيقات Django باستخدام Gunicorn و Nginx، كيفية برمجة موقع إعلانات مبوبة باستخدام Python، إنشاء موقع تصنيفات مبوبة Python،  نشر تطبيقات Django باستخدام Gunicorn و Nginx، Python Django،
 


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



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


خطوات برمجة موقع إعلانات مبوبة باستخدام Python Django



الخطوة 1: إعداد بيئة التطوير وإنشاء مشروع Django

تأكد من تثبيت Python و pip على جهازك. ثم قم بتثبيت Django :
pip install django
--

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

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

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

في ملف ads/models.py، سنقوم بتعريف نماذج البيانات الأساسية
 للإعلانات والفئات والصور والمستخدمين :




Python

from django.db import models
from django.contrib.auth.models import User
from django.utils.text import slugify

class Category(models.Model):
    name = models.CharField(max_length=100, unique=True)
    slug = models.SlugField(max_length=100, unique=True, blank=True)

    class Meta:
        verbose_name_plural = 'Categories'

    def __str__(self):
        return self.name

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.name)
        super().save(*args, **kwargs)

class Ad(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    title = models.CharField(max_length=255)
    slug = models.SlugField(max_length=255, unique=True, blank=True)
    description = models.TextField()
    price = models.DecimalField(max_digits=10, decimal_places=2)
    location = models.CharField(max_length=255)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    is_active = models.BooleanField(default=True)

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
        super().save(*args, **kwargs)

class AdImage(models.Model):
    ad = models.ForeignKey(Ad, on_delete=models.CASCADE, related_name='images')
    image = models.ImageField(upload_to='ads/')
    uploaded_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"Image for {self.ad.title}"


--

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

Python

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

* قم بإنشاء التغييرات وتنفيذها :
python manage.py makemigrations ads
python manage.py migrate
--



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

أنشئ مجلدًا باسم templates داخل مجلد تطبيق ads. ثم أنشئ ملفات HTML التالية:
* ads/templates/ads/ad_list.html: لعرض قائمة الإعلانات:

HTML

<!DOCTYPE html>
<html>
<head>
    <title>الإعلانات المبوبة</title>
</head>
<body>
    <h1>الإعلانات المعروضة</h1>
    <ul>
        {% for ad in ads %}
            <li><a href="{% url 'ad_detail' ad.slug %}">{{ ad.title }}</a> - {{ ad.price }} - {{ ad.location }}</li>
        {% empty %}
            <li>لا توجد إعلانات معروضة حاليًا.</li>
        {% endfor %}
    </ul>
    <a href="{% url 'add_ad' %}">أضف إعلانًا جديدًا</a>
</body>
</html>
--

* ads/templates/ads/ad_detail.html: لعرض تفاصيل الإعلان:




HTML

<!DOCTYPE html>
<html>
<head>
    <title>{{ ad.title }}</title>
</head>
<body>
    <h1>{{ ad.title }}</h1>
    <p>السعر: {{ ad.price }}</p>
    <p>الموقع: {{ ad.location }}</p>
    <p>الوصف: {{ ad.description }}</p>
    <p>تاريخ الإضافة: {{ ad.created_at }}</p>
    {% if ad.images.all %}
        <div>
            {% for image in ad.images.all %}
                <img src="{{ image.image.url }}" alt="صورة للإعلان" style="max-width: 300px;">
            {% endfor %}
        </div>
    {% endif %}
    <a href="{% url 'ad_list' %}">العودة إلى قائمة الإعلانات</a>
</body>
</html>


--

* ads/templates/ads/add_ad.html: لنموذج إضافة إعلان جديد:

HTML

<!DOCTYPE html>
<html>
<head>
    <title>إضافة إعلان جديد</title>
</head>
<body>
    <h1>أضف إعلانًا جديدًا</h1>
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">إضافة الإعلان</button>
    </form>
    <a href="{% url 'ad_list' %}">العودة إلى قائمة الإعلانات</a>
</body>
</html>
--

الخطوة 4: إنشاء النماذج (Forms)

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

Python

from django import forms
from .models import Ad, AdImage
class AddAdForm(forms.ModelForm):
    class Meta:
        model = Ad
        fields = ['category', 'title', 'description', 'price', 'location']
class AddImageForm(forms.ModelForm):
    class Meta:
        model = AdImage
        fields = ['image']
        widgets = {
            'image': forms.ClearableFileInput(attrs={'multiple': True}),
        }
--

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

* في ملف ads/views.py :




Python

from django.shortcuts import render, redirect, get_object_or_404
from .models import Ad, Category, AdImage
from .forms import AddAdForm, AddImageForm
from django.contrib.auth.decorators import login_required
from django.db import transaction

def ad_list(request):
    ads = Ad.objects.filter(is_active=True).order_by('-created_at')
    return render(request, 'ads/ad_list.html', {'ads': ads})

def ad_detail(request, slug):
    ad = get_object_or_404(Ad, slug=slug, is_active=True)
    return render(request, 'ads/ad_detail.html', {'ad': ad})

@login_required
def add_ad(request):
    if request.method == 'POST':
        ad_form = AddAdForm(request.POST)
        image_form = AddImageForm(request.POST, request.FILES)
        if ad_form.is_valid() and image_form.is_valid():
            ad = ad_form.save(commit=False)
            ad.user = request.user
            ad.save()
            for image in request.FILES.getlist('image'):
                AdImage.objects.create(ad=ad, image=image)
            return redirect('ad_detail', slug=ad.slug)
    else:
        ad_form = AddAdForm()
        image_form = AddImageForm()
    return render(request, 'ads/add_ad.html', {'ad_form': ad_form, 'image_form': image_form})


--

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

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

from django.urls import path
from . import views
urlpatterns = [
    path('', views.ad_list, name='ad_list'),
    path('add/', views.add_ad, name='add_ad'),
    path('<slug:slug>/', views.ad_detail, name='ad_detail'),
]
--




* قم بتضمين مسارات تطبيق ads في ملف classifieds_platform/urls.py :




Python

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
    path('admin/', admin.site.urls),
    path('classifieds/', include('ads.urls')),
    path('accounts/', include('django.contrib.auth.urls')), # لتسجيل الدخول والخروج
    path('', lambda request: redirect('/classifieds/')), # إعادة التوجيه إلى قائمة الإعلانات عند الوصول إلى الجذر
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)


--

تأكد من إضافة 'django.contrib.auth' إلى INSTALLED_APPS في settings.py.

الخطوة 7: إنشاء واجهة إدارة (Django Admin)

لتسهيل إدارة الإعلانات والفئات والصور، قم بتسجيل النماذج في
 Django Admin في ملف ads/admin.py:




Python

from django.contrib import admin
from .models import Ad, Category, AdImage

class AdImageInline(admin.TabularInline):
    model = AdImage
    extra = 3

@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    list_display = ('name', 'slug')
    prepopulated_fields = {'slug': ('name',)}

@admin.register(Ad)
class AdAdmin(admin.ModelAdmin):
    list_display = ('title', 'category', 'user', 'price', 'location', 'created_at', 'is_active')
    list_filter = ('category', 'is_active')
    search_fields = ('title', 'description', 'location')
    prepopulated_fields = {'slug': ('title',)}
    inlines = [AdImageInline]

@admin.register(AdImage)
class AdImageAdmin(admin.ModelAdmin):
    list_display = ('ad', 'image', 'uploaded_at')



--
*قم بإنشاء مستخدم مسؤول إذا لم يكن لديك واحدًا بالفعل:
python manage.py createsuperuser
--
* ثم قم بتشغيل خادم التطوير وقم بزيارة 
http://127.0.0.1:8000/admin/ لتسجيل الدخول وإدارة الإعلانات والفئات.

الخطوة 8: حفظ بيانات الإعلانات

يتم حفظ بيانات الإعلانات في قاعدة البيانات عند تقديم نموذج إضافة الإعلان
 (AddAdForm) في طريقة العرض add_ad. يتم إنشاء كائن Ad جديد 
مرتبط بالمستخدم والفئة، ويتم حفظ الصور المرتبطة بالإعلان باستخدام 
نموذج AdImage. Django ORM يتولى عملية التفاعل مع قاعدة البيانات 
وحفظ البيانات بناءً على تعريف النماذج والعلاقات بينها.

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

لنشر تطبيق Django، يمكنك اتباع الخطوات العامة التالية (باستخدام Gunicorn و Nginx كمثال):
* تثبيت Gunicorn :
pip install gunicorn
--
* اختبار Gunicorn : انتقل إلى مجلد مشروع Django وقم بتشغيل:
gunicorn classifieds_platform.wsgi:application
* تثبيت Nginx : 
sudo apt update
sudo apt install nginx
--
* تكوين Nginx : قم بإنشاء ملف تكوين جديد للموقع الخاص بك في
 /etc/nginx/sites-available/ (مثل classifieds_platform) 
وقم بربطه بـ /etc/nginx/sites-enabled/. مثال على التكوين:




Nginx

server {
    listen 80;
    server_name your_domain_or_IP;

    location /static/ {
        alias /path/to/your/project/staticfiles/;
    }

    location /media/ {
        alias /path/to/your/project/media/;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}


--

* استبدل your_domain_or_IP بعنوان نطاقك أو عنوان
 IP الخاص بالخادم، و /path/to/your/project/staticfiles/ بالمسا
ر الفعلي لمجلد الملفات الثابتة الخاص بك، و
 /path/to/your/project/media/ بالمسار الفعلي لمجلد الوسائط الخاص بك.

* جمع الملفات الثابتة :
python manage.py collectstatic
--
تكوين نظام إدارة العمليات (مثل systemd) لتشغيل Gunicorn تلقائيًا.

* إعادة تشغيل Nginx :
sudo systemctl restart nginx
--
تأمين الخادم الخاص بك (مثل إعداد جدار حماية وتكوين HTTPS باستخدام Let's Encrypt).

* الخلاصة :

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


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