تقنيات نور التعليمية تقنيات نور التعليمية

آخر الأخبار

جاري التحميل ...

الدرس التاسع: إنشاء نظام الإشعارات الداخلية

✅ الدرس 9: إنشاء نظام الإشعارات الداخلية (Notifications System)

إنشاء نظام الإشعارات الداخلية

🎯 أهداف الدرس

سننشئ نظام إشعارات احترافي داخل لوحة التحكم يشمل:

1.إنشاء إشعار تلقائي عند:
  • إضافة مستخدم
  • تعديل مستخدم
  • حذف مستخدم
2.عرض الإشعارات داخل لوحة التحكم
3.عدّاد إشعارات غير مقروءة
4.تعليم الإشعار كمقروء

🧱 1️⃣ إنشاء Model الإشعارات

dashboard/models.py

from django.db import models
from django.contrib.auth.models import User

class Notification(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="notifications")
    message = models.CharField(max_length=255)
    is_read = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.message

تنفيذ الترحيل

python manage.py makemigrations
python manage.py migrate

🧱 2️⃣ إنشاء دالة مساعدة لإنشاء إشعار

dashboard/utils.py

from .models import Notification
from django.contrib.auth.models import User

def create_notification(message):
    admins = User.objects.filter(is_staff=True)
    for admin in admins:
        Notification.objects.create(
            user=admin,
            message=message
        )

🧱 3️⃣ ربط الإشعارات بالعمليات (Create – Edit – Delete)

مثال: عند إضافة مستخدم

dashboard/views.py

from .utils import create_notification

create_notification(f"تم إنشاء مستخدم جديد: {new_user.username}")

عند تعديل مستخدم

create_notification(f"تم تعديل بيانات المستخدم: {user.username}")

عند حذف مستخدم

create_notification(f"تم حذف المستخدم: {user.username}")

📌 ضع السطر المناسب داخل الـ view الخاصة بكل عملية


🧱 4️⃣ View عرض الإشعارات

dashboard/views.py

@login_required
@admin_required
def notifications(request):
    notes = request.user.notifications.order_by("-created_at")
    return render(request, "dashboard/notifications.html", {
        "notes": notes
    })

🧱 5️⃣ واجهة عرض الإشعارات

dashboard/templates/dashboard/notifications.html

{% extends "dashboard/base.html" %}
{% block content %}

<h3>الإشعارات</h3>

<ul class="list-group">
    {% for note in notes %}
    <li class="list-group-item d-flex justify-content-between
        {% if not note.is_read %}list-group-item-warning{% endif %}">
        {{ note.message }}
        <small>{{ note.created_at|date:"Y-m-d H:i" }}</small>
    </li>
    {% empty %}
    <li class="list-group-item">لا توجد إشعارات</li>
    {% endfor %}
</ul>

{% endblock %}

🧱 6️⃣ عدّاد الإشعارات غير المقروءة (Badge)

dashboard/context_processors.py

def unread_notifications(request):
    if request.user.is_authenticated:
        return {
            "unread_notifications":
            request.user.notifications.filter(is_read=False).count()
        }
    return {}

تسجيله في settings.py

TEMPLATES = [
    {
        "OPTIONS": {
            "context_processors": [
                "dashboard.context_processors.unread_notifications",
            ],
        },
    },
]

🧱 7️⃣ عرض العدّاد في الـ Sidebar أو Navbar

base.html

<a href="{% url 'notifications' %}" class="nav-link">
    الإشعارات
    {% if unread_notifications > 0 %}
        <span class="badge bg-danger">{{ unread_notifications }}</span>
    {% endif %}
</a>

🧱 8️⃣ تعليم الإشعارات كمقروءة

dashboard/views.py

@login_required
def mark_notification_read(request, id):
    note = Notification.objects.get(id=id, user=request.user)
    note.is_read = True
    note.save()
    return redirect("notifications")

زر في الواجهة

<a href="{% url 'mark_notification_read' note.id %}" class="btn btn-sm btn-outline-success">
    تم
</a>

🧪 ماذا أصبح لديك الآن؟

✅ نظام إشعارات حقيقي
✅ إشعارات تلقائية عند أي عملية
✅ عدّاد إشعارات غير مقروءة
✅ تصميم واضح ومرن
✅ جاهز للتوسعة (Realtime – Email – WebSocket)


🏁 الخلاصة

لوحة التحكم الخاصة بك الآن:

  • تُراقب
  • تُسجّل
  • تُخطر
  • تُدار باحتراف

وهي نفس البنية المستخدمة في الأنظمة الكبيرة 🔥

عن الكاتب

Tamer Ahmed

التعليقات


اتصل بنا

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

جميع الحقوق محفوظة

تقنيات نور التعليمية