
كيفية برمجة موقع لعرض الأخبار باستخدام Python Django
بناء موقع لعرض الأخبار باستخدام Python Django: اليك دليل شامل
انطلق في رحلة بناء منصتك الإخبارية الرقمية الخاصة باستخدام قوة Python Django!
في هذا الدليل المفصل، سنرشدك خطوة بخطوة خلال عملية إنشاء موقع ويب بسيط
ولكنه فعال لعرض الأخبار وتصنيفاتها. سواء كنت مطور ويب طموحًا أو مؤسسة
إعلامية صغيرة تسعى لتوسيع نطاق وصولها عبر الإنترنت، سيزودك هذا المقال بالمعرفة و
الأكواد الأساسية لتحويل فكرتك إلى موقع إخباري حيوي وقابل للتصفح.
تابع معنا من البداية وحتى مرحلة النشر لتكتشف كيف يمكن لـ Django أن يجعل
عملية إنشاء موقعك الإخباري أمرًا منظمًا وقابلاً للتحقيق.
خطوات برمجة موقع لعرض الأخبار باستخدام Python Django
في هذا الدليل الشامل سنستعرض خطوات بناء موقع بسيط لعرض الأخبار
باستخدام لغة البرمجة Python وإطار العمل Django.
سنغطي كل شيء بدءًا من تصميم وإنشاء واجهة المستخدم لعرض الأخبار وتصنيفاتها،
مرورًا بتعريف نماذج البيانات لتخزين الأخبار، وصولًا إلى
حفظ هذه البيانات ونشر التطبيق.
الخطوة 1: إعداد بيئة التطوير وإنشاء مشروع Django
* تأكد من تثبيت Python و pip على جهازك. ثم قم بتثبيت Django :
pip install django
--
* أنشئ مشروع Django جديدًا باسم news_site :
django-admin startproject news_site
cd news_site
--
* أنشئ تطبيقًا داخل المشروع باسم news :
python manage.py startapp news
--
الخطوة 2: تعريف نماذج البيانات (Models)
في ملف news/models.py، سنقوم بتعريف نماذج البيانات الأساسية للأخبار والتصنيفات :
from django.db import modelsfrom django.utils import timezone
class Category(models.Model): name = models.CharField(max_length=100, unique=True)
def __str__(self): return self.name
class Article(models.Model): title = models.CharField(max_length=255) slug = models.SlugField(unique=True) category = models.ForeignKey(Category, on_delete=models.CASCADE) content = models.TextField() pub_date = models.DateTimeField(default=timezone.now) image = models.ImageField(upload_to='news/', blank=True, null=True)
def __str__(self): return self.title
class Meta: ordering = ['-pub_date']
* أضف تطبيق news إلى قائمة INSTALLED_APPS في ملف news_site/settings.py:
Python
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'news', # إضافة تطبيق news هنا
]
--
* قم بإنشاء التغييرات وتنفيذها :
python manage.py makemigrations news
python manage.py migrate
--
الخطوة 3: إنشاء واجهة المستخدم (Templates)
أنشئ مجلدًا باسم templates داخل مجلد تطبيق news. ثم أنشئ ملفات HTML التالية :
news/templates/news/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.category.name }} | تاريخ النشر: {{ article.pub_date }}</p> {% if article.image %} <img src="{{ article.image.url }}" alt="{{ article.title }}" width="200"> {% endif %} <p>{{ article.content|truncatewords:50 }} <a href="{% url 'article_detail' article.slug %}">اقرأ المزيد</a></p> </li> {% empty %} <li>لا توجد أخبار متاحة حاليًا.</li> {% endfor %} </ul>
<h2>تصنيفات الأخبار</h2> <ul> {% for category in categories %} <li><a href="{% url 'category_articles' category.slug %}">{{ category.name }}</a></li> {% endfor %} </ul></body></html>
* news/templates/news/article_detail.html: لعرض تفاصيل الخبر :
HTML
<!DOCTYPE html>
<html>
<head>
<title>{{ article.title }} - موقع الأخبار</title>
</head>
<body>
<h1>{{ article.title }}</h1>
<p>التصنيف: {{ article.category.name }} | تاريخ النشر: {{ article.pub_date }}</p>
{% if article.image %}
<img src="{{ article.image.url }}" alt="{{ article.title }}" width="400">
{% endif %}
<div class="content">
{{ article.content|linebreaksbr }}
</div>
<p><a href="{% url 'article_list' %}">العودة إلى قائمة الأخبار</a></p>
</body>
</html>
--
* news/templates/news/category_articles.html :
لعرض الأخبار ضمن تصنيف معين :
HTML
<!DOCTYPE html><html><head> <title>أخبار تصنيف {{ category.name }} - موقع الأخبار</title></head><body> <h1>أخبار تصنيف: {{ category.name }}</h1> <ul> {% for article in articles %} <li> <h2><a href="{% url 'article_detail' article.slug %}">{{ article.title }}</a></h2> <p>تاريخ النشر: {{ article.pub_date }}</p> {% if article.image %} <img src="{{ article.image.url }}" alt="{{ article.title }}" width="200"> {% endif %} <p>{{ article.content|truncatewords:50 }} <a href="{% url 'article_detail' article.slug %}">اقرأ المزيد</a></p> </li> {% empty %} <li>لا توجد أخبار في هذا التصنيف حاليًا.</li> {% endfor %} </ul> <p><a href="{% url 'article_list' %}">العودة إلى قائمة الأخبار الرئيسية</a></p></body></html>
الخطوة 4: إنشاء طرق العرض (Views)
في ملف news/views.py، سنقوم بإنشاء طرق العرض التي تتحكم في منطق التطبيق وتعرض القوالب:
Python
from django.shortcuts import render, get_object_or_404from .models import Article, Category
def article_list(request): articles = Article.objects.all() categories = Category.objects.all() context = {'articles': articles, 'categories': categories} return render(request, 'news/article_list.html', context)
def article_detail(request, slug): article = get_object_or_404(Article, slug=slug) context = {'article': article} return render(request, 'news/article_detail.html', context)
def category_articles(request, slug): category = get_object_or_404(Category, slug=slug) articles = Article.objects.filter(category=category) categories = Category.objects.all() context = {'category': category, 'articles': articles, 'categories': categories} return render(request, 'news/category_articles.html', context)
الخطوة 5: تعريف مسارات URL (URLs)
في ملف news/urls.py (إذا لم يكن موجودًا، قم بإنشائه):
Python
from django.urls import path
from . import views
from django.utils.text import slugify
urlpatterns = [
path('', views.article_list, name='article_list'),
path('<slug:slug>/', views.article_detail, name='article_detail'),
path('category/<slug:slug>/', views.category_articles, name='category_articles'),
]
--
* قم بتضمين مسارات تطبيق news في ملف news_site/urls.py:
Python
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('news.urls')), # تضمين مسارات تطبيق news
]
--
الخطوة 6: إضافة بعض الأخبار والتصنيفات الأولية (اختياري)
يمكنك استخدام Django Admin لإضافة بعض الأخبار والتصنيفات الأولية إلى قاعدة البيانات.
قم بإنشاء مستخدم مسؤول:
python manage.py createsuperuser
* ثم قم بتشغيل خادم التطوير:
python manage.py runserver
قم بزيارة http://127.0.0.1:8000/admin/ وقم بتسجيل الدخول لإضافة التصنيفات والأخبار.
تأكد من ملء حقل slug بشكل فريد لكل تصنيف وخبر
(يمكنك استخدام دالة slugify من django.utils.text لإنشاء slugs تلقائيًا).
الخطوة 7: حفظ النقاط (بيانات الأخبار والتصنيفات)
لقد قمنا بالفعل بحفظ بيانات الأخبار والتصنيفات في قاعدة البيانات عند
إنشائها وتعديلها من خلال Django Admin أو من خلال أي نماذج أخرى قد تقوم
بإنشائها في المستقبل. Django ORM يتولى عملية التفاعل مع قاعدة
البيانات وحفظ البيانات بناءً على تعريف النماذج الخاصة بك.
الخطوة 8: نشر التطبيق
لنشر تطبيق Django، يمكنك اتباع نفس الخطوات العامة المذكورة في
قسم النشر في مثال المتجر الإلكتروني البسيط (باستخدام Gunicorn و Nginx أو
أي خادم ويب و WSGI آخر تفضله). تأكد من تكوين خادم الويب الخاص بك
لخدمة الملفات الثابتة التي تم جمعها بواسطة python manage.py collectstatic.
* الخلاصة
لقد فمنا من خلال الخطوات الأساسية بـ بناء موقع بسيط لعرض الأخبار باستخدام
Python Django. بدءًا من إعداد المشروع وتعريف نماذج البيانات،
مرورًا بإنشاء واجهة المستخدم وطرق العرض والمسارات، وصولًا إلى حفظ بيانات
الأخبار ونشر التطبيق. يمكنك الآن توسيع هذا الموقع بإضافة المزيد من الميزات
مثل البحث، والتعليقات، ولوحة إدارة متقدمة للمحررين، وتكامل مع وسائل التواصل الاجتماعي.
Django يوفر لك إطار عمل قويًا لبناء مواقع ويب ديناميكية وغنية بالميزات مثل مواقع الأخبار.