البرمجة

دليل العروض في جانغو

تطبيق عملي لتعلم جانغو – الجزء الخامس: العروض Views العامة والتفصيلية

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

1. العروض (Views) في جانغو

العرض (View) في جانغو هو الوظيفة أو الكود البرمجي الذي يعالج الطلبات الواردة من المستخدم ويرد عليها. يعمل العرض على معالجة البيانات المطلوبة من قاعدة البيانات أو من مصادر أخرى، ثم إرسال استجابة للمستخدم، والتي قد تكون صفحة HTML، بيانات JSON، أو حتى ملفات وسائط متعددة.

تعتبر العروض جزءًا أساسيًا من بنية تطبيق جانغو، وتساعد في تنظيم كيفية استجابة التطبيق لطلبات HTTP المختلفة مثل GET و POST.

1.1. أنواع العروض في جانغو

في جانغو، توجد عدة طرق لتنظيم العروض، وأهمها:

  • العروض المباشرة (Function-based views): هي أبسط أنواع العروض في جانغو، حيث يتم كتابة دالة عادية تعالج طلبًا معينًا.

  • العروض المعتمدة على الفئات (Class-based views): توفر جانغو طريقة أكثر تنظيمًا وقوة للتعامل مع العروض من خلال الكائنات والفئات.

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

2. العروض العامة (Generic Views)

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

2.1. عرض قائمة العناصر (ListView)

عند بناء تطبيق ويب يعرض قائمة من العناصر (مثل مقالات، منتجات، أو حتى تعليقات)، يمكننا استخدام ListView من جانغو لتحقيق ذلك ببساطة. هذا النوع من العروض يعرض مجموعة من الكائنات من قاعدة البيانات في صفحة واحدة.

مثال تطبيقي: عرض قائمة من المقالات

python
# في ملف views.py from django.views.generic import ListView from .models import Article class ArticleListView(ListView): model = Article template_name = 'articles/article_list.html' context_object_name = 'articles'

في هذا المثال، يقوم العرض ArticleListView بعرض جميع المقالات الموجودة في قاعدة البيانات باستخدام الـ model المعين. نحدد أيضًا القالب الذي سيتم استخدامه template_name، وأخيرًا نحدد اسم الكائن الذي سيظهر في القالب من خلال context_object_name.

2.2. عرض تفاصيل العنصر (DetailView)

إذا كان التطبيق يتطلب عرض تفاصيل عنصر واحد من البيانات، مثل عرض تفاصيل مقال أو منتج، يمكننا استخدام DetailView. هذا العرض يعرض جميع البيانات المتعلقة بكائن واحد معين من قاعدة البيانات.

مثال تطبيقي: عرض تفاصيل مقال

python
# في ملف views.py from django.views.generic import DetailView from .models import Article class ArticleDetailView(DetailView): model = Article template_name = 'articles/article_detail.html' context_object_name = 'article'

في هذا المثال، يقوم العرض ArticleDetailView بعرض التفاصيل الخاصة بمقال واحد. كما في ListView، نحدد نموذج البيانات المستخدم (في هذه الحالة Article)، والقالب الذي سيتم عرضه، واسم الكائن الذي سيظهر في القالب.

2.3. عرض إنشاء عنصر جديد (CreateView)

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

مثال تطبيقي: إنشاء مقال جديد

python
# في ملف views.py from django.views.generic import CreateView from .models import Article from django.urls import reverse_lazy class ArticleCreateView(CreateView): model = Article template_name = 'articles/article_form.html' fields = ['title', 'content'] success_url = reverse_lazy('article-list')

في هذا المثال، يقوم العرض ArticleCreateView بإنشاء مقال جديد. نحدد النموذج الذي سيتم استخدامه (في هذه الحالة، الحقول title و content)، والـ URL الذي سيتم إعادة التوجيه إليه بعد إضافة المقال الجديد بنجاح (من خلال success_url).

2.4. عرض تعديل عنصر (UpdateView)

في التطبيقات التي تتطلب تعديل بيانات موجودة، مثل تعديل مقال أو منتج، يمكننا استخدام UpdateView. هذا العرض يعرض نموذجًا مع البيانات الحالية لتمكين المستخدم من تعديلها.

مثال تطبيقي: تعديل مقال

python
# في ملف views.py from django.views.generic import UpdateView from .models import Article from django.urls import reverse_lazy class ArticleUpdateView(UpdateView): model = Article template_name = 'articles/article_form.html' fields = ['title', 'content'] success_url = reverse_lazy('article-list')

في هذا المثال، يقوم العرض ArticleUpdateView بتعديل مقال موجود. كما في CreateView، نحدد الحقول التي سيتم تعديلها، مثل title و content، مع تحديد الـ URL الذي سيتم إعادة التوجيه إليه بعد نجاح التعديل.

2.5. عرض حذف عنصر (DeleteView)

إذا كان التطبيق يتطلب حذف عنصر معين، مثل حذف مقال أو منتج، يمكننا استخدام DeleteView. هذا العرض يعرض صفحة تأكيد للمستخدم قبل حذف الكائن.

مثال تطبيقي: حذف مقال

python
# في ملف views.py from django.views.generic import DeleteView from .models import Article from django.urls import reverse_lazy class ArticleDeleteView(DeleteView): model = Article template_name = 'articles/article_confirm_delete.html' success_url = reverse_lazy('article-list')

في هذا المثال، يقوم العرض ArticleDeleteView بحذف مقال بعد تأكيد المستخدم. نحدد القالب الذي سيعرض للمستخدم قبل الحذف (لتأكيد العملية)، مع تحديد الـ URL الذي سيتم إعادة التوجيه إليه بعد الحذف بنجاح.

3. العروض التفصيلية (Detail Views) باستخدام العروض المعتمدة على الفئات

العروض التفصيلية هي تلك العروض التي تتعامل مع كائنات مفردة، مثل عرض تفاصيل مقال أو منتج. يمكننا استخدام Class-based views (CBVs) مع طريقة DetailView للحصول على طريقة أكثر تنظيماً ومرونة لإظهار التفاصيل.

3.1. عرض تفاصيل عنصر مفصل

لنأخذ مثالاً على عرض تفاصيل مقال باستخدام DetailView في جانغو، حيث نريد إظهار جميع المعلومات المتعلقة بمقال واحد، مثل العنوان والمحتوى وتاريخ النشر.

python
# في ملف views.py from django.views.generic import DetailView from .models import Article class ArticleDetailView(DetailView): model = Article template_name = 'articles/article_detail.html' context_object_name = 'article'

3.2. تخصيص العروض التفصيلية

يمكن تخصيص العروض التفصيلية بطرق مختلفة، مثل إضافة معالجة منطقية للبيانات قبل عرضها على المستخدم أو دمج وظائف إضافية. يمكن إضافة معالج get_context_data لتخصيص البيانات المرسلة إلى القالب:

python
# في ملف views.py class ArticleDetailView(DetailView): model = Article template_name = 'articles/article_detail.html' context_object_name = 'article' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['related_articles'] = Article.objects.filter(category=self.object.category) return context

في هذا المثال، نقوم بإضافة مقالات مشابهة في نفس الفئة إلى السياق المرسل إلى القالب باستخدام get_context_data.

4. استخدام العروض العامة في تطبيقات جانغو

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

5. خلاصة

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