مُقدّمة
بعد التّعرف في الدّرس السّابق على مفهوم الاختبارات (Tests) في مُحرّك القوالب Jinja، سنتعرّف في هذا الدّرس على بعض من أهمّ الاختبارات التّي يجب عليك الإلمام بها لتطوير تطبيقات ويب أفضل بشكل أسهل وأسرع مع إطار العمل Flask، بعد التّعرف على هذه الاختبارات، يُمكنك استعمالها ببساطة للتّحقق من أنّ القيمة المتواجدة بمُتغيّر ما هي ما تُريده بالفعل، كما ستتمكّن من تنفيذ إجراءات حسب حالة المُتغيّر.
الاختبار iterable
قُلنا من قبل بأنّ الكائنات من النّوع iterable
عبارة عن أي كائن يُمكنك الدّوران حوله باستخدام حلقة for
، هذا يشمل مجموعات العناصر مثل القوائم والسّلاسل النّصيّة وأنواع أخرى من القيم، إذا لم تكن متأكّدا من أنّ كائنا ما عبارة عن كائن من النّوع Iterable
فيُمكنك استخدام الاختبار iterable
للتّحقق من الأمر بشكل بسيط.
مثلا، يُمكن أن تجد بأنّك ستحتاج إلى الدّوران حول مُتغيّر لكنّك لست متأكّدا من أنّه سيكون دائما قابلا لذلك، لذا لتفادي عرض الأخطاء للمُستخدم، يُمكنك استخدام الاختبار iterable
مع جملة if
شرطيّة، وهكذا ستتمكّن من الدّوران حول المُتغيّر فقط إذا كان من النّوع Iterable
أمّا إن لم يكن كذلك فسيتم تجاهله إلى أن تتغيّر قيمته إلى نوع قابل للدّوران عليه.
المثال التّالي توضيح لكيفيّة استعمال الاختبار Iterable
:
{% set variable = 'ABCD' %} {% if variable is iterable %} <ul> {% for item in variable %} <li>{{ item }}</li> {% endfor %} </ul> {% else %} لا يُمكنك الدّوران حول قيمة المُتغيّر {% endif %}
المثال بسيط وواضح، إذ نقوم بتعريف المُتغيّر variable
ونتحقّق من أنّه من النّوع Iterable
عن طريق كل من الجملة الشّرطيّة if
والاختبار iterable
، إذا كانت قيمة المُتغيّر قابلة للدّوران عليها، فإنّنا نقوم باستعمال الحلقة for
للوصول إلى كل عنصر وعرضه على شكل عنصر من قائمة HTML، أمّا إن لم تجتز قيمة المُتغيّر الاختبار فإنّنا نعرض الجملة “لا يُمكنك الدّوران حول قيمة المُتغيّر”.
بما أنّنا نستطيع الدّوران حول أي سلسلة نصيّة في لغة بايثون للوصول إلى عناصرها، فنتيجة المثال ستكون قائمة HTML لعرض عناصر السلسلة النّصيّة ABCD
.
لنتأكّد من أنّ المثال يعمل في كلتا الحالتين، غيّر السّطر الأول إلى ما يلي:
{% set variable = 100 %}
في هذه الحالة، قيمة المُتغيّر هي العدد الصّحيح 100، والأعداد الصّحيحة نوع لا يُمكن أن تدور حوله (إلّا إذا ما حوّلته إلى سلسلة نصيّة)، لذا فالنّتيجة هذه المرّة ستكون الجملة “لا يُمكنك الدّوران حول قيمة المُتغيّر ”.
الاختبار lower
عند التّعامل مع الأحرف اللاتينيّة، قد ترغب بالتّحقق من أنّ قيمة مُتغيّر عبارة عن أحرف صغيرة (Lowercase)، وهذا بالضّبط ما يُمكنك فعله بالاختبار lower
.
المثال التّالي يُوضّح طريقة عمل الاختبار lower
:
{% set words = ['ORM', 'walk', 'run', 'OOP'] %}
{% for word in words %}
{% if word is lower %}
{{ word }}
{% else %}
{{ word }} is an acronym.
{% endif %}
<br>
{% endfor %}
في المثال أعلاه، نُعرّف قائمة باسم words
تحتوي على بضعة كلمات، بعضها عبارة عن كلمات عاديّة والبعض الآخر عبارة عن اختصارات، وكما تعلم فهذه الأخيرة تُكتب بأحرف كبيرة لذا سنتمكّن من فصلها عن الكلمات الأخرى باستخدام الاختبار lower
لأنّ الكلمات العاديّة مكتوبة بأحرف صغيرة، ما يعني بأنّها ستجتاز الاختبار، أمّا الاختصارات فلن تجتازه، لذا نقوم بالدّوران حول القائمة واختبار كل عنصر، فإن كانت الكلمة تحتوي على الأحرف الصّغيرة فقط فإنّنا نعرضها أمّا إن لم تكن كذلك فإنّنا نعرض رسالة تُفيد بأنّ العنصر عبارة عن اختصار لعبارة ما.
نتيجة المثال أعلاه ستكون كما يلي:
ORM is an acronym.
walk
run
OOP is an acronym.
الاختبار upper
هذا الاختبار هو عكس الاختبار lower
، إذ يُستعمل للتّحقق من أنّ كلمة ما مكتوبة بأحرف كبيرة، وطريقة استخدامه مُشابهة لطريقة استخدام الاختبار lower
.
مثال على كيفيّة استخدام الاختبار upper
:
{% set words = ['ORM', 'walk', 'run', 'OOP'] %}
{% for word in words %}
{% if word is upper %}
{{ word }}
<br>
{% endif %}
{% endfor %}
النّتيجة:
ORM
OOP
الاختبار undefined
تعرّفنا من قبل على الاختبار defined
، وقلنا بأنّه يُستعمل للتّحقق من أنّ مُتغيّرا ما معرّف أو لا، الاختبار undefined
يقوم بالعكس، إذ يرجع القيمة المنطقيّة True
إذا لم يكن المُتغيّر مُعرّفا، والقيمة False
إذا كان المُتغيّر مُعرّفا.
الاختبار none
في لغة بايثون، إذا كان مُتغيّر ما يحمل القيمة None
فهذا يعني بأنّ المُتغيّر مُعرّف لكنّه فارغ ولا يحمل أية قيمة، هذه القيمة مُهمّة جدّا إذا كنت تتعامل مع بعض المكتبات التّي تُساعد على التّعامل مع قواعد البيانات مثل مكتبة SQLAlchemy التّي سنعتمد عليها بشكل أساسيّ في مشروع “كلمة” الذي نبنيه في هذه الدّروس، لذا فمعرفة الغرض من القيمة None مهم.
الاختبار none
الذي يُمكنك استعماله في قوالب Jinja سيُساعدك على التّحقق ممّا إذا كانت قيمة الكائن الذي تتعامل معه فارغة أو لا، وبالتّالي ستتمكّن من عرض رسالة مفهومة للمُستخدم في حالة كانت نتيجة ما يبحث عنه هي القيمة None
، فمثلا يُمكنك عرض الرّسالة “هذا المُستخدم لم يُضف نبذة عن نفسه بعد” في الصفحة الشّخصيّة للمُستخدمين الذين لم يقوموا بإضافة نبذة شخصيّة إلى حساباتهم، وهكذا سيعرف الزائر سبب غياب أي وصف في المكان المخصّص لذلك.
المثال التّالي يُوضّح استعمال الاختبار none
مع جملة شرطيّة لعرض رسالة تنبيه في حالة كانت قيمة العنصر فارغة:
{% set list = [None, 'One', None, 'Two'] %}
{% for item in list %}
{% if item is none %}
قيمة العنصر فارغة
<br>
{% else %}
{{ item }}
<br>
{% endif %}
{% endfor %}
في المثال أعلاه، مزجنا بين السّلاسل النّصيّة والقيمة None
في عناصر القائمة list
، بعدها نقوم بالدّوران حول القائمة بحلقة for
، ثمّ بعد ذلك نتحقّق ممّا إذا العنصر الحالي عبارة عن قيمة فارغة، فإن كان الأمر كذلك فإنّنا نعرض الرّسالة “قيمة العنصر فارغة”، أمّا إن لم يكن العنصر فارغا فإنّنا نعرضه.
النّتيجة:
قيمة العنصر فارغة
One
قيمة العنصر فارغة
Two
الاختبار number
لمعرفة ما إذا كانت قيمة كائن ما عبارة عن عدد أو لا، يُمكنك استخدام الاختبار number
، مع التّأكيد على أنّ الأعداد العشريّة تُعتبر أعدادا كذلك، لذا ستجتاز الاختبار بشكل عادي.
المثال التّالي توضيح على كيفيّة استخدام الاختبار number
:
{% set list = [1, 'Flask', 2, 3, 3.2, 0.001] %}
{% for item in list %}
{% if item is number %}
{{ item }} عبارة عن عدد
<br>
{% else %}
{{ item }} ليس بعدد
<br>
{% endif %}
{% endfor %}
في هذا المثال، نقوم بتعريف قائمة تحتوي على أعداد وسلاسل نصيّة، ندور حول القائمة باستعمال حلقة for
ثمّ نستعمل الاختبار number
للتّحقّق ممّا إذا كان العنصر عددا أو لا، فإن كان عددا فإنّنا نعرض رسالة تُفيد بأنّ العنصر عبارة عن عدد بالفعل، أمّا إن لم يكن العنصر كذلك فإنّنا نعرض رسالة مفادها بأنّ القيمة ليست بعدد.
نتيجة المثال:
1 عبارة عن عدد
Flask ليس بعدد
2 عبارة عن عدد
3 عبارة عن عدد
3.2 عبارة عن عدد
0.001 عبارة عن عدد
لاحظ في النّتيجة بأنّ الأعداد العشريّة تجتاز الاختبار كذلك.
الاختبار string
للتّحقق من أنّ قيمة ما عبارة عن سلسلة نصيّة، يُمكنك استخدام الاختبار string
الذي يعمل بطريقة مُشابهة لطريقة عمل الاختبار number
، ويُمكنك استعماله عند التّعامل مع البيانات التّي يُمكن أن تكون سلاسل نصيّة كما يُمكن أن تكون قيما أخرى في قاعدة البيانات.
مثال على كيفيّة استخدام الاختبار string
:
{% set list = ['Flask', 2017, None] %}
{% for item in list %}
{% if item is number %}
{{ item }} عبارة عن عدد
<br>
{% elif item is string %}
{{ item }} عبارة عن سلسلة نصيّة
<br>
{% else %}
{{ item }} ليس بعدد وليس سلسلة نصيّة
<br>
{% endif %}
{% endfor %}
في المثال أعلاه، نقوم بإنشاء قائمة ثمّ ندور عليها كالعادة، نختبر ما إذا كان كل عنصر عبارة عن عدد بالاختبار number
لعرض رسالة تُفيد بذلك، إذا لم تكن القيمة عددا فإنّنا نستعمل الاختبار string
لنرى إذا ما كانت القيمة سلسلة نصيّة لنعرض رسالة مفادها أنّ القيمة سلسلة نصيّة بالفعل، إذا لم تكن القيمة لا عددا ولا سلسلة نصيّة فإنّنا نعرض الجملة “ليس بعدد وليس سلسلة نصيّة ”.
النّتيجة:
Flask عبارة عن سلسلة نصيّة
2017 عبارة عن عدد
None ليس بعدد وليس سلسلة نصيّة
ختاما
هكذا نكون قد تعرّفنا على ماهيّة الاختبارات في مُحرّك القوالب Jinja، وألقينا نظرة إلى بعض من أهمّ الاختبارات المبنيّة مُسبقا وعلى كيفيّة استخدامها في تطبيقات Flask أو أي مشروع بايثون آخر يعتمد على Jinja، سننتقل في الدّرس القادم إلى كيفيّة إنشاء اختبارات خاصّة بنا لاستعمالها في حالة لم تجد اختبارا يُلبي حاجتك في قائمة الاختبارات المبنيّة مُسبقا.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.