عروض جانغو

العرض عبارة عن دالة تتلقى طلب ويب وترجع استجابة ويب. و يتم تمثيل طلب الويب بمثيل لفئة طلب HTTP لـ جانغو، ويتم تمثيل استجابة الويب بمثيل لفئة استجابة HTTP الخاصة بـ Django.

العروض هي العقل المدبر وراء كل تطبيق Django. حيث تحتوي على منطق معالجة الطلبات وإرجاع الاستجابات. و يمكنك التفكير في العرض كوحدة تحكم في بنية Model-View-Template (MVT).

عروض جانغو مسؤولة عن:

  • تلقي ومعالجة طلبات الويب.
  • الاستعلام عن قاعدة البيانات.
  • تطبيق منطق الأعمال على البيانات.
  • إرجاع الرد للمستخدم.

يتم إنشاء عرض جانغو في ملف view.py لتطبيق Django ويرتبط بنمط عنوان URL في ملف urls.py الخاص بالتطبيق. عندما ينتقل المستخدم إلى عنوان URL المرتبط، يتم تنفيذ دالة العرض ويتم إرجاع الاستجابة إلى المستخدم.

من المهم ملاحظة أن عرض جانغو يجب أن تحتوي فقط على منطق معالجة الطلبات وإرجاع الاستجابات. ويجب ألا تحتوي على أي منطق HTML أو عرض تقديمي. و يعد هذا مبدأ أساسيًا في بنية MVT ويسمح بقاعدة تعليمات برمجية أنظف وأكثر قابلية للصيانة.

إنشاء عرض في جانغو

لإنشاء عرض في Django، ستحتاج إلى القيام بما يلي:

  • افتح ملف view.py في تطبيق Django.
  • إنشاء دالة التي ستمثل العرض. و يجب أن تأخذ هذه الدالة الطلب كوسيط وترجع استجابة.
  • داخل الدالة، يمكنك القيام بأي معالجة تحتاج إلى القيام بها، مثل الاستعلام عن قاعدة البيانات أو تطبيق منطق الأعمال على البيانات.
  • عندما تكون مستعدًا لإرجاع استجابة للمستخدم، استخدم فئة HttpResponse لإنشاء كائن استجابة HTTP وإعادته من وظيفة العرض.

فيما يلي مثال لدالة العرض في Django:

from django.http import HttpResponse

def greetings(request):
    message = "Hello, World!"
    return HttpResponse(message)

ستعيد دالة العرض رسالة للمستخدم “Hello, World!” عندما يتم استدعاؤها.

و لربط هذا العرض بعنوان URL، ستحتاج إلى إضافة نمط URL إلى ملف urls.py في تطبيق Django.

from django.urls import path

from . import views

urlpatterns = [
    path('greetings/', views.greetings, name='greetings'),
]

سيقوم نمط عنوان URL هذا بتعيين دالة العرض إلى عنوان URL /greetings/. و عندما ينتقل المستخدم إلى هذا العنوان، سيتم تنفيذ دالة العرض وتظهر رسالة “Hello, World!” إلى المستخدم.

إستخدام نظام قالب جانغو

يعد نظام قوالب Django أداة قوية لعرض صفحات HTML الديناميكية. فهو يسمح لك بفصل العرض التقديمي لتطبيق Django عن المنطق الكامن وراءه، مما يسهل صيانة التعليمات البرمجية وإعادة استخدامها.

و لاستخدام نظام قالب Django، ستحتاج إلى القيام بما يلي:

  • قم بإنشاء ملف قالب في دليل القوالب لتطبيق Django. يجب أن يحتوي هذا ملف HTML مع عناصر نائبة للمحتوى الديناميكي.
  • داخل دالة العرض استخدم دالة render() من وحدة shortcuts لعرض القالب ببيانات السياق المطلوبة. تأخذ دالة render() الطلب والمسار إلى ملف القالب وقاموس بيانات السياق كوسيطات وترجع كائن HttpResponse مع القالب المعروض.

فيما يلي مثال لدالة عرض تستخدم نظام قالب Django:

from django.shortcuts import render

def greetings(request):
    message = "Hello, World!"
    return render(request, 'greetings.html', {'message': message})

ستعرض دالة العرض قالب Greetings.html مع بيانات السياق {'message': 'Hello, World!'}. و يمكن للقالب بعد ذلك استخدام العنصر النائب {{ message }} لعرض الرسالة الديناميكية.

تمرير البيانات إلى عرض جانغو

هناك عدة طرق لتمرير البيانات إلى عرض Django. الطريقة الأكثر شيوعًا هي استخدام كائن الطلب.

يحتوي كائن الطلب، وهو مثيل لفئة HttpRequest، على معلومات حول طلب الويب الحالي، مثل عنوان URL و توابع HTTP والرؤوس ومعلمات الاستعلام. يمكنك الوصول إلى هذه المعلومات من خلال دالة العرض باستخدام كائن الطلب.

على سبيل المثال، يمكنك الوصول إلى معلمات الاستعلام لطلب GET باستخدام سمة GET لكائن الطلب:

def greetings(request):
    name = request.GET.get('name', 'World')
    message = f"Hello, {name}!"
    return HttpResponse(message)

في المثال السابق، يتم تمرير معلمة name إلى العرض كمعلمة استعلام في عنوان URL (على سبيل المثال، /greetings?name=Kader). , إذا لم يتم توفير معلمة  name، فسيتم استخدام القيمة الافتراضية “World”.

هناك طريقة أخرى لتمرير البيانات إلى العرض وهي تضمينها في عنوان URL كمعلمة مسار. و للقيام بذلك، يمكنك استخدام التعابير القياسية في أنماط عنوان URL. على سبيل المثال:

from django.urls import path

from . import views

urlpatterns = [
    path('greetings/<str:name>/', views.greetings, name='greetings'),
]

في هذا المثال، يتم تضمين معلمة  name في عنوان URL كمعلمة مسار (على سبيل المثال، /greetings/Kader/). يمكن لدالة العرض بعد ذلك الوصول إلى معلمة  name باستخدام اسم التعابير القياسية ( name في هذه الحالة).

def greetings(request, name):
    message = f"Hello, {name}!"
    return HttpResponse(message)

يمكنك أيضًا تمرير البيانات إلى العرض عن طريق تضمينها في قاموس بيانات السياق عند عرض القالب. يعد هذا مفيدًا عندما تريد تمرير كمية كبيرة من البيانات أو عندما تريد تمرير البيانات من مصادر متعددة إلى القالب.

def greetings(request):
    name = request.GET.get('name', 'World')
    message = f"Hello, {name}!"
    context = {'message': message, 'name': name}
    return render(request, 'greetings.html', context)

قمنا بتمرير متغيرات  message و  name إلى القالب كبيانات سياق. يمكن للقالب بعد ذلك استخدام العنصرين {{ message }} و {{ name }} لعرض البيانات الديناميكية.

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

العروض المستندة إلى الفئات

تعد العروض المستندة إلى الفئات (CBVs) طريقة قوية ومرنة لإنشاء العروض. يث تسمح لك بإعادة استخدام التعليمات البرمجية و إنشاء عرض أكثر تعقيدًا بطريقة نظيفة ومنظمة.

العرض المستند إلى فئة هو فئة تقوم بإنشاء دالة العرض كتابع. و يجب أن ترث الفئة من إحدى فئات العرض الأساسية في Django ويحدد طريقة فعل HTTP الذي تريد التعامل معه (على سبيل المثال، get() لطلبات GET و ، post() لطلبات POST).

فيما يلي مثال على عرض بسيط قائم على الفئة في Django:

from django.http import HttpResponse
from django.views.generic import View

class GreetingsView(View):
    def get(self, request):
        message = "Hello, World!"
        return HttpResponse(message)

يحدد هذا العرض المبني على الفئة التابع get() الذي يتعامل مع طلبات GET وترجع رسالة “Hello, World!” رسالة للمستخدم.

لاستخدام هذا العرض المستند إلى الفئة، ستحتاج إلى تعيينه إلى نمط عنوان URL في ملف urls.py لتطبيق Django.

from django.urls import path

from . import views

urlpatterns = [
    path('greetings/', views.GreetingsView.as_view(), name='greetings'),
]

سيقوم نمط عنوان URL بتعيين العرض المستند إلى فئة GreetingsView إلى عنوان URL /greetings/. و عندما ينتقل المستخدم إلى عنوان URL، سيتم استدعاء التابع get() الخاص بفئة GreetingsView وسيظهر “Hello, World!” إلى المستخدم.

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

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

المزج بين العروض القائمة على الفئات و الدوال

من الممكن مزج العرض المستندة إلى الفئة (CBVs) و العرض المستندة إلى الدوال (FBVs) في تطبيق Django. و يمكن أن يكون هذا مفيدًا عندما تريد الاستفادة من فوائد كلا النوعين من العروض.

لاستخدام كل من CBVs وFBVs في تطبيق Django، ستحتاج إلى تحديد العرض كالمعتاد وتعيينها لأنماط URL في ملف urls.py لتطبيقك.

على سبيل المثال، قد يكون لديك عرضًا يستند إلى الدوال لعنوان URL /greetings/ وعرضًا يستند إلى الفئة لعنوان URL /welcome/، كما يلي:

from django.urls import path

from . import views

urlpatterns = [
    path('greetings/', views.greetings, name='greetings'),
    path('welcome/', views.WelcomeView.as_view(), name='welcome'),
]

في هذا المثال، عرض  greetings هو عرض يعتمد على الدوال و WelcomeView هو عرض يعتمد على الفئة. يتم تعيين كلا العرضين إلى عناوين URL منفصلة ويمكن استخدامهما بشكل مستقل.

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

التعامل مع توابع HTTP في عروض جانغو

يمكنك التعامل مع توابع HTTP المختلفة ( GET، POST، PUT، DELETE) في نفس العرض عن طريق تحديد توابع منفصلة لكل توابع HTTP.

بالنسبة للعروض المستندة إلى الدوال، يمكنك استخدام سمة request.method لتحديد تابع HTTP للطلب وإرجاع استجابة مختلفة وفقًا لذلك. على سبيل المثال:

def greetings(request):
    if request.method == 'GET':
        message = "Hello, World!"
    elif request.method == 'POST':
        message = "Hello, POST request!"
    else:
        message = "Hello, other request!"
    return HttpResponse(message)

أما بالنسبة للعروض المستندة إلى الفئات، يمكنك تعريف توابع منفصلة لكل تابع HTTP تريد التعامل معه. يجب أن يتطابق اسم التابع مع فعل HTTP (get() لطلبات GET، وpost() لطلبات POST). على سبيل المثال:

from django.views.generic import View

class GreetingsView(View):
    def get(self, request):
        message = "Hello, GET request!"
        return HttpResponse(message)

    def post(self, request):
        message = "Hello, POST request!"
        return HttpResponse(message)

يجب عليك فقط التعامل مع توابع HTTP الضرورية للعرض. على سبيل المثال، إذا كان العرض الخاص بك يحتاج فقط إلى معالجة طلبات GET، فلا يجب عليك تحديد طريقة post(). يساعد هذا في الحفاظ على التعليمات البرمجية الخاصة بك نظيفة وقابلة للصيانة.

العمل مع Forms في عروض جانغو

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

للعمل مع Forms في عرض Django، ستحتاج إلى القيام بما يلي:

  • قم بإنشاء فئة form في ملف Forms.py الخاص بتطبيق Django. يجب أن ترث هذه الفئة من Forms.Form أو Forms.ModelForm وتحديد الحقول ومنطق التحقق من صحة form.
  • في دالة العرض، قم بإنشاء مثيل لفئة form وتمريره إلى سياق القالب.
  • في القالب قم بعرض form باستخدام علامتي القالب {% csrf_token %} و{{form.as_p }}.
  • في دالة العرض تحقق مما إذا كان form قد تم إرساله باستخدام سمة request.method. إذا تم إرسال form، فتحقق مما إذا كان form صالحًا باستخدام form.is_valid(). إذا كان form صالحًا، فيمكنك معالجة بيانات form وحفظها في قاعدة البيانات.

فيما يلي مثال لدالة عرض تعمل مع form في Django:

from django.shortcuts import render
from .forms import ContactForm

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # معالجة بيانات النموذج وحفظها في قاعدة البيانات
            form.save()
            return HttpResponse("Thank you for your message!")
    else:
        form = ContactForm()
    return render(request, 'contact.html', {'form': form})

في هذا المثال، يتم عرض نموذج ContactForm في القالب ومعالجته في دالة العرض. إذا كان النموذج صالحًا، فسيتم حفظه في قاعدة البيانات.

تقنيات العرض المتقدمة في جانغو

هناك العديد من التقنيات المتقدمة التي يمكنك استخدامها في عروض Django لتحسين دوال وأداء التطبيق. بعض هذه التقنيات تشمل:

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

معالجة الأخطاء: من المهم التعامل مع الأخطاء والاستثناءات في العروض لمنع التطبيق من التعطل ولتوفير تجربة مستخدم أفضل. يوفر Django عدة طرق لمعالجة الأخطاء في العروض، بما في ذلك استخدام كتل try-except واستخدام Handle_exception().

الإشارات: إشارات Django هي وسيلة للسماح بتشغيل إجراءات معينة عند حدوث أحداث معينة في التطبيق. يمكن أن تكون مفيدة لأداء المهام التي يجب القيام بها عند حفظ البيانات أو حذفها.


اكتشاف المزيد من بايثون العربي

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

Scroll to Top

اكتشاف المزيد من بايثون العربي

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

Continue reading