تطبيق عملي لتعلم جانغو – الجزء الثالث: موقع مدير جانغو Django Admin
يُعد إطار جانغو (Django) أحد أقوى أطر تطوير تطبيقات الويب المعتمدة على لغة البرمجة بايثون. ومن أبرز ميزاته التي تجعله يتفوق على العديد من أطر العمل الأخرى هو توفر لوحة إدارة مدمجة تعرف باسم Django Admin، والتي تسهل بشكل كبير عملية التعامل مع البيانات ونماذج قواعد البيانات دون الحاجة إلى برمجة واجهات مستخدم خاصة بها.
في هذا الجزء من السلسلة المخصصة للتطبيق العملي على Django، سنغوص في العمق لفهم لوحة إدارة جانغو، آلية عملها، طرق تهيئتها وتخصيصها، وأفضل الممارسات في التعامل معها ضمن مشاريع واقعية.
ما هو Django Admin؟
لوحة Django Admin هي واجهة ويب مدمجة تُولد تلقائيًا بمجرد إعداد مشروع جانغو، وتوفر أدوات كاملة لإدارة المحتوى والبيانات في الموقع. هذه اللوحة تُبنى استنادًا إلى النماذج (Models) التي يعرّفها المطور ضمن التطبيق، وتوفر واجهات جاهزة لإضافة وتعديل وحذف وعرض البيانات.
أهمية Django Admin في تطوير المشاريع
توفر لوحة إدارة جانغو فوائد عديدة منها:
-
توفير الوقت والجهد: بدلاً من تصميم لوحة تحكم من الصفر، توفر Django Admin واجهة جاهزة يمكن استخدامها مباشرة بعد تهيئة النماذج.
-
إدارة المستخدمين والأذونات: يمكن من خلالها التحكم في المستخدمين ومنح الصلاحيات بحسب الحاجة.
-
سهولة الاختبار وإدخال البيانات: تُعد أداة فعالة للمطورين لإدخال البيانات خلال مراحل تطوير واختبار التطبيقات.
-
التوسع والتخصيص: يمكن تخصيصها لتلائم واجهات المؤسسات والأساليب التجارية الخاصة.
تفعيل Django Admin في مشروع جانغو
بشكل افتراضي، يأتي Django Admin مدمجًا في كل مشروع جانغو جديد، ولكن يجب القيام ببعض الخطوات لضمان تشغيله بشكل صحيح:
1. تضمين django.contrib.admin في ملف الإعدادات
تأكد من أن تطبيق django.contrib.admin مُضاف إلى قائمة INSTALLED_APPS في ملف settings.py:
pythonINSTALLED_APPS = [
...
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
...
]
2. إعداد عنوان URL للوحة الإدارة
في ملف urls.py الرئيسي في المشروع، أضف السطر التالي:
pythonfrom django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
3. إنشاء المستخدم المشرف (superuser)
حتى تتمكن من الدخول إلى لوحة الإدارة، يجب إنشاء حساب مشرف:
bashpython manage.py createsuperuser
بعد إدخال اسم المستخدم والبريد وكلمة المرور، سيتم إنشاء الحساب بنجاح.
4. تشغيل السيرفر
يمكن تشغيل الخادم المحلي عبر الأمر:
bashpython manage.py runserver
ثم يمكن الوصول إلى لوحة الإدارة عبر الرابط:
arduinohttp://127.0.0.1:8000/admin/
تسجيل النماذج في لوحة Django Admin
لجعل نموذج معين ظاهرًا في لوحة الإدارة، يجب تسجيله باستخدام واجهة admin.py الخاصة بالتطبيق.
مثال على نموذج بسيط في models.py:
pythonfrom django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
published = models.BooleanField(default=False)
ولتسجيله في admin.py:
pythonfrom django.contrib import admin
from .models import Article
admin.site.register(Article)
بعد ذلك، ستظهر فئة Article في لوحة Django Admin ويمكن إدارة بياناتها من خلال واجهة المستخدم الرسومية بسهولة.
تخصيص Django Admin
على الرغم من أن Django Admin تأتي جاهزة، إلا أنها قابلة للتخصيص لتتناسب مع احتياجات المشروع. يمكن تخصيص المظهر، الحقول، الفلاتر، والبحث، وحتى ربطها بنماذج ذات علاقات متعددة.
تخصيص العرض في قائمة العناصر
pythonclass ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'published')
list_filter = ('published',)
search_fields = ('title',)
admin.site.register(Article, ArticleAdmin)
استخدام الحقول المرتبطة Inline
إذا كان لديك نموذج تابع مثل التعليقات Comment تابعة لمقالة Article:
pythonclass Comment(models.Model):
article = models.ForeignKey(Article, on_delete=models.CASCADE)
text = models.TextField()
يمكن تضمين التعليقات داخل صفحة المقالة:
pythonclass CommentInline(admin.TabularInline):
model = Comment
extra = 1
class ArticleAdmin(admin.ModelAdmin):
inlines = [CommentInline]
admin.site.register(Article, ArticleAdmin)
التحكم في صلاحيات المستخدمين
تُعد لوحة Django Admin أداة قوية للتحكم في صلاحيات المستخدمين:
-
يمكن تعيين مستخدمين كمشرفين أو موظفين.
-
يمكن منح صلاحيات جزئية لإضافة أو تعديل أو حذف كائنات محددة.
-
يمكن استخدام مجموعات (Groups) لتجميع صلاحيات معينة.
ويمكن ضبط هذه الصلاحيات مباشرة من لوحة Django Admin في قسم “Users” و “Groups”.
جدول: مقارنة بين واجهات إدارة البيانات المختلفة
| الميزة | Django Admin | إنشاء لوحة إدارة يدوية | أدوات إدارة خارجية (مثل Wagtail) |
|---|---|---|---|
| التوفر الفوري | ✅ | ❌ | ❌ |
| القابلية للتخصيص | ✅ | ✅ | ✅ |
| سهولة التهيئة | ✅ | ❌ | ❌ |
| واجهة مستخدم احترافية | متوسطة | تعتمد على التنفيذ | عالية (في بعض الأدوات) |
| إدارة المستخدمين والأذونات | ✅ | يتطلب بناء يدوي | ✅ |
| دعم العلاقات بين النماذج | ✅ | يتطلب جهد إضافي | ✅ |
التعامل مع العلاقات والحقول المعقدة
لوحة Django Admin قادرة على التعامل مع النماذج المعقدة التي تحتوي على علاقات ForeignKey, ManyToMany, و OneToOne. ويمكن تخصيص عرض هذه العلاقات بشكل دقيق:
استخدام raw_id_fields
في حالة العلاقات مع قواعد بيانات ضخمة، يُفضل استخدام raw_id_fields لتفادي قوائم منسدلة بطيئة:
pythonclass ArticleAdmin(admin.ModelAdmin):
raw_id_fields = ('author',)
التعديل على واجهة لوحة الإدارة
يمكن تعديل شكل واجهة الإدارة بالكامل باستخدام ملفات CSS وHTML مخصصة، أو عبر مكتبات خارجية مثل:
هذه الأدوات توفر واجهات أكثر أناقة واحترافية يمكن تخصيصها لتلائم الهوية البصرية للمشروع أو المؤسسة.
حماية لوحة الإدارة
بما أن لوحة Django Admin تمنح صلاحيات واسعة لإدارة النظام، يجب تأمينها قدر الإمكان. وتشمل وسائل الحماية:
-
تغيير مسار الدخول من
/admin/إلى مسار آخر. -
تفعيل المصادقة الثنائية (2FA).
-
استخدام شهادات SSL.
-
ضبط إعدادات
ALLOWED_HOSTSوCSRF.
استخدام الإشعارات والعمليات المخصصة
يمكن للمطورين إضافة عمليات مخصصة داخل Django Admin، مثل أزرار تنفيذ أوامر على الكائنات المختارة.
مثال:
pythondef mark_as_published(modeladmin, request, queryset):
queryset.update(published=True)
mark_as_published.short_description = "نشر المقالات المختارة"
class ArticleAdmin(admin.ModelAdmin):
actions = [mark_as_published]
التوسع باستخدام إدارة متعددة المواقع
يتيح جانغو إمكانية استخدام لوحة الإدارة لإدارة محتوى مواقع متعددة (Multi-site)، وذلك عبر استخدام تطبيق django.contrib.sites. كل نموذج يمكن ربطه بموقع معين، ويتم عرض المحتوى بحسب إعدادات الموقع المرتبطة.
التعامل مع ملفات الوسائط والتحميل
عند إدارة ملفات وصور عبر النماذج، مثل الصور الشخصية أو الوثائق، تدعم Django Admin تحميل هذه الملفات وعرضها، ولكن يجب ضبط إعدادات MEDIA_URL وMEDIA_ROOT في المشروع.
دمج Django Admin مع نظام تسجيل الأنشطة
يمكن توسيع لوحة الإدارة لتشمل خاصية تسجيل كل التعديلات التي تحدث على الكائنات، وذلك عبر مكتبات مثل:
هذه الأدوات تمكن من تتبع كل عملية إضافة أو تعديل أو حذف، وهو أمر بالغ الأهمية في الأنظمة الحساسة.
الاستفادة من الجداول والتحليل
يمكن بناء تقارير وتحليلات بسيطة باستخدام Django Admin، من خلال تخصيص القوائم وإضافة عمليات جمع وتحليل مباشرة على واجهة الإدارة.
الخلاصة
لوحة Django Admin ليست مجرد واجهة مؤقتة أو أداة لتسهيل التطوير، بل يمكن الاعتماد عليها كنظام إدارة متكامل في المشاريع الصغيرة والمتوسطة، بل وحتى في المشاريع الكبيرة التي لا تتطلب واجهات إدارة مخصصة بالكامل. مرونتها، قابليتها للتخصيص، والدمج السلس مع نماذج جانغو يجعلها أحد أقوى أدوات تطوير الويب في بيئة بايثون.
المراجع:
-
Django Documentation – https://docs.djangoproject.com
-
Django Admin Interface – GitHub https://github.com/fabiocaccamo/django-admin-interface

