
كيفية برمجة نظام إدارة محتوى (CMS) باستخدام Python Django
هل تتطلع إلى تعلم كيفية برمجة نظام إدارة محتوى (CMS) قوي ومرن باستخدام Python Django؟
في هذا الدليل الشامل، سنكشف عن الخطوات الأساسية لإنشاء نظام
بسيط ولكنه فعال لإدارة محتوى موقع الويب الخاص بك. سنبدأ بشرح
كيفية تصميم وإنشاء واجهة مستخدم سهلة الاستخدام في Django لإنشاء
وتعديل وعرض المحتوى. ثم سنتناول كيفية تعريف نماذج البيانات في Django
لتخزين أنواع مختلفة من المحتوى مثل الصفحات والمقالات بشكل منظم.
بعد ذلك، سنوضح كيفية حفظ هذه البيانات في قاعدة البيانات باستخدام Django ORM.
وأخيرًا، سنقدم نظرة عامة على كيفية نشر تطبيق Django ليصبح نظام إدارة المحتوى
الخاص بك متاحًا عبر الإنترنت. تابع معنا لتتعلم كيفية برمجة نظام إدارة محتوى
(CMS) باستخدام Python Django خطوة بخطوة.
خطوات برمجة نظام إدارة محتوى (CMS)
في هذا الدليل الشامل، سنستعرض خطوات بناء نظام إدارة محتوى (CMS) بسيط
باستخدام لغة البرمجة Python وإطار العمل Django. سنغطي كل شيء
بدءًا من تصميم وإنشاء واجهة المستخدم لإدارة وعرض المحتوى، مرورًا بتعريف
نماذج البيانات لتخزين أنواع مختلفة من المحتوى، وصولًا إلى حفظ هذه البيانات ونشر التطبيق.
الخطوة 1: إعداد بيئة التطوير وإنشاء مشروع Django
تأكد من تثبيت Python و pip على جهازك. ثم قم بتثبيت Django:
pip install django
--
* أنشئ مشروع Django جديدًا باسم simple_cms:
django-admin startproject simple_cms
cd simple_cms
--
* أنشئ تطبيقًا داخل المشروع باسم cms:
python manage.py startapp cms
--
الخطوة 2: تعريف نماذج البيانات (Models)
في ملف cms/models.py، سنقوم بتعريف نماذج البيانات الأساسية للصفحات والمقالات:
Python
from django.db import modelsfrom django.contrib.auth.models import Userfrom django.utils import timezonefrom django.template.defaultfilters import slugify
class Page(models.Model): title = models.CharField(max_length=255) slug = models.SlugField(unique=True, blank=True) content = models.TextField() created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True) is_published = models.BooleanField(default=False)
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 Article(models.Model): title = models.CharField(max_length=255) slug = models.SlugField(unique=True, blank=True) body = models.TextField() pub_date = models.DateTimeField(default=timezone.now) author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True) is_published = models.BooleanField(default=False)
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 Meta: ordering = ['-pub_date']
* أضف تطبيق cms إلى قائمة INSTALLED_APPS في
ملف simple_cms/settings.py:
Python
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'cms', # إضافة تطبيق cms هنا
]
--
* قم بإنشاء التغييرات وتنفيذها:
python manage.py makemigrations cms
python manage.py migrate
--
الخطوة 3: إنشاء واجهة المستخدم (Templates)
أنشئ مجلدًا باسم templates داخل مجلد تطبيق cms. ثم أنشئ ملفات HTML التالية:
cms/templates/cms/page_detail.html: لعرض تفاصيل الصفحة :
HTML
<!DOCTYPE html>
<html>
<head>
<title>{{ page.title }} - نظام إدارة المحتوى</title>
</head>
<body>
<h1>{{ page.title }}</h1>
<div class="content">
{{ page.content|linebreaksbr }}
</div>
</body>
</html>
--
* cms/templates/cms/article_list.html: لعرض قائمة المقالات المنشورة :
HTML
<!DOCTYPE html><html><head> <title>آخر المقالات - نظام إدارة المحتوى</title></head><body> <h1>آخر المقالات</h1> <ul> {% for article in articles %} <li> <h2><a href="{% url 'article_detail' article.slug %}">{{ article.title }}</a></h2> <p>تاريخ النشر: {{ article.pub_date }} | بواسطة: {{ article.author.username }}</p> <p>{{ article.body|truncatewords:50 }} <a href="{% url 'article_detail' article.slug %}">اقرأ المزيد</a></p> </li> {% empty %} <li>لا توجد مقالات منشورة حاليًا.</li> {% endfor %} </ul></body></html>
* cms/templates/cms/article_detail.html: لعرض تفاصيل المقالة :
HTML
<!DOCTYPE html>
<html>
<head>
<title>{{ article.title }} - نظام إدارة المحتوى</title>
</head>
<body>
<h1>{{ article.title }}</h1>
<p>تاريخ النشر: {{ article.pub_date }} | بواسطة: {{ article.author.username }}</p>
<div class="article-body">
{{ article.body|linebreaksbr }}
</div>
<p><a href="{% url 'article_list' %}">العودة إلى قائمة المقالات</a></p>
</body>
</html>
--
الخطوة 4: إنشاء طرق العرض (Views)
في ملف cms/views.py، سنقوم بإنشاء طرق العرض التي تتحكم
في منطق التطبيق وتعرض القوالب:
Python
from django.shortcuts import render, get_object_or_404from .models import Page, Article
def page_detail(request, slug): page = get_object_or_404(Page, slug=slug, is_published=True) context = {'page': page} return render(request, 'cms/page_detail.html', context)
def article_list(request): articles = Article.objects.filter(is_published=True).order_by('-pub_date') context = {'articles': articles} return render(request, 'cms/article_list.html', context)
def article_detail(request, slug): article = get_object_or_404(Article, slug=slug, is_published=True) context = {'article': article} return render(request, 'cms/article_detail.html', context)
الخطوة 5: تعريف مسارات URL (URLs)
في ملف cms/urls.py (إذا لم يكن موجودًا، قم بإنشائه):
Python
from django.urls import path
from . import views
urlpatterns = [
path('<slug:slug>/', views.page_detail, name='page_detail'),
path('articles/', views.article_list, name='article_list'),
path('articles/<slug:slug>/', views.article_detail, name='article_detail'),
]
--
* قم بتضمين مسارات تطبيق cms في ملف simple_cms/urls.py:
Python
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('cms.urls')), # تضمين مسارات تطبيق cms
]
--
الخطوة 6: إنشاء واجهة إدارة (Django Admin)
لتسهيل إضافة وتعديل المحتوى، سنقوم بتسجيل نماذج Page و Article
في Django Admin. في ملف cms/admin.py:
Python
from django.contrib import adminfrom .models import Page, Article
class PageAdmin(admin.ModelAdmin): list_display = ('title', 'slug', 'is_published', 'updated_at') prepopulated_fields = {'slug': ('title',)} list_filter = ('is_published',) search_fields = ('title', 'content')
class ArticleAdmin(admin.ModelAdmin): list_display = ('title', 'slug', 'pub_date', 'author', 'is_published') prepopulated_fields = {'slug': ('title',)} list_filter = ('is_published', 'pub_date', 'author') search_fields = ('title', 'body') date_hierarchy = 'pub_date'
admin.site.register(Page, PageAdmin)admin.site.register(Article, ArticleAdmin)
* قم بإنشاء مستخدم مسؤول إذا لم يكن لديك واحدًا بالفعل :
python manage.py createsuperuser
--
ثم قم بتشغيل خادم التطوير وقم بزيارة http://127.0.0.1:8000/admin/ لتسجيل الدخول وإدارة المحتوى.
الخطوة 7: حفظ النقاط (بيانات الصفحات والمقالات)
يتم حفظ بيانات الصفحات والمقالات في قاعدة البيانات تلقائيًا عند إنشائها
وتعديلها من خلال واجهة Django Admin. Django ORM يتولى
عملية التفاعل مع قاعدة البيانات وحفظ البيانات بناءً على تعريف النماذج الخاصة بك.
الخطوة 8: نشر التطبيق
لنشر تطبيق Django، يمكنك اتباع نفس الخطوات العامة المذكورة في
قسم النشر في مثال المتجر الإلكتروني البسيط (باستخدام Gunicorn و Nginx أو
أي خادم ويب و WSGI آخر تفضله). تأكد من تكوين خادم الويب الخاص بك
لخدمة الملفات الثابتة التي تم جمعها بواسطة python manage.py collectstatic.
* الخلاصة
لقد سرنا خلال الخطوات الأساسية لبناء نظام إدارة محتوى (CMS) بسيط
باستخدام Python Django. بدءًا من إعداد المشروع وتعريف نماذج البيانات،
مرورًا بإنشاء واجهة المستخدم وطرق العرض والمسارات وواجهة الإدارة، وصولًا إلى
حفظ بيانات المحتوى ونشر التطبيق. يمكنك الآن توسيع هذا النظام بإضافة المزيد من الميزات مثل أنواع محتوى مخصصة،
وإدارة المستخدمين والصلاحيات، ودعم الوسائط المتعددة، والقوالب المتقدمة.
Django يوفر لك إطار عمل قويًا ومرنًا لبناء أنظمة إدارة محتوى متكاملة.