بدء استخدام طرق العرض

مكتمل

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

في Django، عادةً تكون طريقة العرض مسؤولة عن التالي:

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

سنبدأ استكشافنا من خلال مناقشة إنشاء طرق العرض يدوياً وتكوين URLconfs المناسبة. تُعد URLconf هي قائمة المسارات التي تشير إلى النمط للمطابقة، والدالة للاستدعاء، والاسم اختيارياً. في أحد الوحدات اللاحقة، سنتعرف على كيفية قيام Django بمعالجة بعض التعليمات البرمجية التي كتبناها يدوياً.

إنشاء طريقة عرض

لإنشاء طريقة عرض من البداية في Django، يمكنك عادةً إنشاء دالة. تحتوي الدالة عادةً على التعليمات البرمجية المناسبة للقيام بالتالي:

  • تنفيذ المهمة التي طلبها المستخدم.
  • إرجاع قالب بالتاريخ المناسب لعرضه على المستخدم.

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

تحميل البيانات

يمكنك استخدام Django ORM لتحميل أي بيانات تحتاج إليها من قاعدة البيانات المسجلة.

يحتوي المشروع الذي نقوم بإنشائه على نموذجين، Shelter وDog. يمكننا تحميل جميع الكائنات أو إجراء استعلامات أخرى باستخدام النماذج التي أنشأناها. لتحميل جميع الملاجئ، على سبيل المثال، يمكننا استخدام Shelter.objects.all(). يمكننا تحميل ملجأ واحد باستخدام Shelter.objects.get(pk=1).

إشعار

يُعد pk هو اختصار للمفتاح الأساسي. يمكنك استخدام id وتحصل على النتيجة نفسها، ولكن استخدام pk سيضمن أن الأمر يعمل إذا قمت بتغيير الخاصية التي تمثل المفتاح الأساسي إلى اسم آخر.

أخطاء 404

يعني خطأ 404 في تطبيقات الويب "غير موجود". كأفضل ممارسة، يجب أن تقوم بإرجاع 404 متى تم تقديم طلب لعنصر غير موجود.

يوفر Django اختصارات لمحاولة تحميل البيانات:

  • get_object_or_404 وget_list_or_404: لتحميل كائن من خلال مفتاح أساسي، أو إرجاع خطأ 404 إلى المستخدم إذا لم يتم العثور على كائن.
  • get_list_or_404: لتنفيذ العملية نفسها كاختصار آخر، باستثناء أنه يقبل معلمة عامل التصفية.

سنستخدم get_object_or_404 في تدريبنا.

عرض القالب

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

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

لتمرير البيانات في القالب، يمكنك توفير render بكائن القاموس context. يحتوي الكائن context على مجموعة من أزواج المفاتيح/القيم، حيث يصبح كل مفتاح أحد المتغيرات في القالب.

مثال

لإنشاء طريقة عرض لعرض جميع الملاجئ، يمكنك استخدام التعليمات البرمجية التالية:

def shelter_list(request):
    shelters = Shelter.objects.all()
    context = { 'shelters': shelters }
    return render(request, 'shelter_list.html', context)

تسجيل مسار

يستخدم أي إطار عمل ويب تقريباً مسارات لمعالجة طلبات المستخدم. تقوم المسارات بتحويل جزء من URL بعد اسم المجال وقبل سلسلة الاستعلام (الذي يأتي بعد علامة الاستفهام) إلى استدعاء دالة.

قد يقوم الاستدعاء إلى www.contoso.com/shelters باستدعاء دالة لسرد جميع الملاجئ، بينما قد يستدعي www.contoso.com/shelters/1 دالة لعرض أحد الملاجئ بمعرف 1. يمكنك تسجيل المسارات في Django عن طريق إنشاء URLconf.

دعنا نقل إن لدينا وحدة نمطية باسم views، وهي اصطلاح Django. يمكننا توجيه مرور الفهرس حيث لم يتم تحديد المسار (مثل www.contoso.com) إلى دالة في views باسم index، ثم منحه اسم index، باستخدام المسار التالي:

path('', views.index, 'index')

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

path('shelters', views.shelter_list, 'shelter_list')

معلمات URL

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

على سبيل المثال، لإنشاء مسار لشخص ما لطلب ملجأ معين باستخدام معرف، سنريد إحدى المعلمات من نوع integer. (إن السبب هو أن مفتاحنا الأساسي هو عدد صحيح.) يمكننا بعد ذلك توفير الاسم الذي نريد استخدامه للمتغير، والذي سيتم تمريره بعد ذلك كمعلمة إلى دالة طريقة العرض. ستكون الصيغة الخاصة بتحديد هذه المعلمة هي <int:pk>. لاحظ إعلان النوع، وعلامة النقطتين، وبعد ذلك اسم المتغير.

قد يظهر المسار الكامل كما يلي:

path('shelter/<int:pk>', views.shelter_detail, name='shelter_detail')

تشمل دالة طريقة العرض المقترنة التوقيع التالي:

def shelter_detail(request, pk):
    # code

يتم تمرير الجزء pk الخاص بتوقيع المسار إلى shelter_detail كإحدى المعلمات، تماماً كما لو أننا قمنا باستدعائه مثل دالة Python العادية.