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

تعد عروض Django واحدة من أهم المشاركين في MVT Structure of Django، وفقًا لوثائق جانغو فإن دالة العرض هي إحدى دوال Python التي تأخذ طلب الويب وترجع استجابة الويب، يمكن أن تكون هذه الاستجابة محتويات HTML لصفحة ويب ، أو إعادة توجيه ، أو خطأ 404 ، أو مستند XML ، أو صورة ، أي شيء يمكن لمتصفح الويب عرضه.

تعد Django views جزءًا من واجهة المستخدم – وعادةً ما تعرض HTML / CSS / Javascript في ملفات القالب إلى ما تراه في متصفحك عند عرض صفحة ويب

مثال عن Django View

بعد أن يكون لديك مشروع جاهز يمكننا إنشاء عرض في app/views.py.

# import Http Response from django
from django.http import HttpResponse
# get datetime
import datetime
  
# create a function
def app_view(request):
    # fetch date and time
    now = datetime.datetime.now()
    # convert to string
    html = "Time is {}".format(now)
    # return response
    return HttpResponse(html)

سنقوم بشرح الكود السابق سطر سطرا:

  • أولاً نستورد HttpResponse من وحدة django.http جنبًا إلى جنب مع مكتبة التاريخ والوقت في Python.
  • بعد ذلك، ننشئ دالة تسمى app_view و هي دالة العرض، تأخذ كل دالة عرض كائن HttpRequest كمعاملها الأول والذي يُسمى عادةً request.
  • يقوم العرض بإرجاع كائن HttpResponse يحتوي على الاستجابة التي تم إنشاؤها، كل دالة عرض مسؤولة عن إرجاع كائن HttpResponse.

بعد الإنتهاء من العرض ننتقل إلى ملف الروابط للعمل عليه app/urls.py.

from django.urls import path
  
# importing views from views..py
from .views import app_view
  
urlpatterns = [
    path('', app_view),
]

قم بفتح المتصفح على الرابط  http://127.0.0.1:8000/

أنواع العروض

تنقسم Django views إلى فئتين رئيسيتين: –

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

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

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

للتذكير ، عروض Django لها ثلاثة متطلبات:

  • قابلة للاستدعاء، حبث يمكن أن يكون العرض إما دالة أو عرض قائم على الفئة.
  • يجب عليهم قبول كائن  HttpRequest  كمدخل أول.
  • يجب عليهم أن يرجعوا كائن  HttpResponse  أو استثناء.

ضع في اعتبارك: لا تحل العروض المستندة إلى الفئات محل العروض القائمة على الدوال.

عند كتابة views لدينا الإختيار : دالة أو قائمة على فئة؟ و كلاهما له إيجابيات وسلبيات: ~

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

تتم كتابة العرض القائم على الدوال باستخدام دالة Python تتلقى كائن HttpRequest كمدخل وتعيد كائن HttpResponse، و تنقسم هذه العروض عمومًا إلى 4 استراتيجيات أساسية : (إنشاء ، استرداد ، تحديث ، حذف) و هي أساس أي إطار عمل يستخدمه المرء للتطوير.

و كما تقول القاعدة “لكل شيء إيجابيات و سلبيات” فإن لهذه العروض أيضا إيجابيات و سلبيات

الإيجابيات

  • سهلة التنفيذ.
  • سهلة القراءة.

السلبيات

  • من الصعب تمديد وإعادة استخدام الكود.
  • معالجة طرق HTTP عبر التفريع الشرطي.

هذا النوع من العروض سهلة التنفيذ ومفيدة للغاية ولكن العيب الرئيسي أثناء إستخدامها في مشاريع Django الكبيرة.

مثال عن العروض القائمة على الدوال

لنقم بإنشاء مثال

class MyCreateView(View):
  template_name = 'form.html'
  form_class = MyForm
  def get(self, request, *args, **kwargs):
    form = self.form_class
    return render(request, template_name, {'form': form})
  def post(self, request, *args, **kwargs):
    form = self.form_class(request.POST)
    if form.is_valid():
      form.save()
      return HttpResonseRedirect(reverse('list-view'))
    else:
      return render(request, self.template_name, {'form': form})

العروض القائمة على الفئة

يوفر العرض المبني على الفئة طريقة بديلة لتنفيذ العرض ككائنات Python بدلاً من الوظائف، و هي لا تحل محل العرض القائم على الدوال ، ولكن لها اختلافات ومزايا معينة عند مقارنتها بالعروض القائمة على الدوال:

  • يمكن معالجة تنظيم الكود المتعلق بأساليب HTTP (GET و POST وما إلى ذلك) من خلال طرق منفصلة بدلاً من التفريع الشرطي.
  • يمكن استخدام التقنيات الموجهة للكائنات مثل mixins (الوراثة المتعددة) لعامل الكود إلى مكونات قابلة لإعادة الاستخدام.

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

مثال على العروض القائمة على الفئات

from django.views.generic.list import ListView
from .models import AppModel
  
class appsList(ListView):
  
    # specify the model for list view
    model = AppModel

الآن نقوم بإنشاء مسار URL لتعيين العرض. في app / urls.py.

from django.urls import path
  
# importing views from views..py
from .views import AppList
urlpatterns = [
    path('', AppList.as_view()),
]

أنشئ نموذجًا في قوالب / app/ appmodel_list.html.

<ul>
    <!-- Iterate over object_list -->
    {% for object in object_list %}
    <!-- Display Objects -->
    <li>{{ object.title }}</li>
    <li>{{ object.description }}</li>
  
    <hr />
    <!-- If objet_list is empty  -->
    {% empty %}
    <li>No objects yet.</li>
    {% endfor %}
</ul>

دعونا نتحقق مما هو موجود على http: // localhost: 8000 /

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


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

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

اترك تعليقاً

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

Scroll to Top

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

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

Continue reading