Quantcast
Channel: Planet Python
Viewing all articles
Browse latest Browse all 22462

بايثون العربي: كيفية إنشاء و التعامل مع الروابط في جانغو

$
0
0

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

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

ماهي الروابط ؟

الروابط عبارة عن عناوين صفحات الويب ويمكنك مشاهدة الروابط عند كل زيارة تقوم بها إلى مواقع الأنترنيت ويمكنك مشاهدتها على شريط العنوان على المتصفح ، 127.0.0.0:8000 هو رابط و http://pyarab.com رابط أيضا .

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

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

ويمكن أن تكون هذه الشبكة صغيرة وبسيطة وثابتة كما يمكن أن تكون معقدة وكبيرة وديناميكية وهذا يعتمد على إحتياجاتنا ومهمة الموقع.

كما توفر جانغو إمكانية ترجمة الروابط وفقا للغة الموقع أو المدونة

كيف تعمل الروابط في جانغو ؟

  1. يتصفح الزائر الموقع ويتنقل بين الصفحات
  2. يقوم جانغو بمطابقة الطلب على حسب ما يتوفر عليه في ملف urls.py
  3. إذا قام جانغو بإيجاد التطابق سيقوم بنقل الزائر إلى الصفحة المطلوبة

قم بفتح ملف mysite/urls.py بأي محرر نصوص ولا حظ ما يحتويه


from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
# Examples:
# url(r'^$', 'mysite.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),

url(r'^admin/', include(admin.site.urls)),
]

وما نلاحظ يمكننا أن نرى أن جانغو قد قام بوضع بعض الأكواد من أجلنا .

السطور التي تبدأ بالعلامة # هي تعليقات ويتم تجاهلها من طرف بايثون .

أما رابط المدير والذي قمنا يزيارته من قبل موجود هنا .


url(r'^admin/', include(admin.site.urls)),

حسنا هذا يعني أنه كل رابط يبدأ ب /admin سيقوم جانغو بإيجاد المحتوى المطابق له .

التعابير القياسية 

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

لفهم عملية إنشاء الأنماط إليك هذا المثال عن كيفية سير العملية وسنتحدث عن اﻷنماط التي تحتاجها فقط

^ من بداية النص 
$  من نهاية النص 
\d جميع اﻷرقام من 0 إلى 9 
+ يوجد مرة واحدة على اﻷقل أو أكثر 
() لإلتقاط جزء من النمط

الأن فلنتفترض أنه لدينا الرابط التالي : http://pyarab.com/post/12345 أين يمثل الرقم 12345 رقم الموضوع .
إن كتابة روابط المواضيع منفصلة أمر متعب ويأخذ وقت طويل ولكن مع التعابير القياسية يمكننا إنشاء أنماط يمكنها ان تطابق الروابط و إستخراج رقم الموضوع المناسب لنا

^post/(\d+)/$

دعونا الأن نقوم بشرح السطر السابق خطوة خطوة حتى يتسنى لنا فهم العملية .

  • ^post/ هذا يخبر جانغو أنه ملزم بأخد أي شيء يبدأ ب post/ في بداية الروابط (مباشرة بعد^ ).
  • (\d+) هذا يعني انه سيكون هناك عدد (رقم أو أكثر) وهذا ما نريد القبض عليه و إستخراجه.
  • هنا نخبر جانغو أن هذه العلامة / يجل إتباعها .
  • $ هنا نشير إلى نهاية الرابط وهذا يعني أن اليلايل التي تنتهي ب / ستتطابق مع هذا النمط.

إنشاء أول رابط جانغو 

حان الوقت لإنشاء أول رابط جانغو لمدوتنا ، نحن نريد من الرابط التالي : http://127.0.0.1:8000/ أن يكون الرابط للصفحة الرئيسية للمدونة وعرض جميع مواضيعها .

ونريد أيضا أن نبقي على ملف mysite/urls.py ملف مرتب وانيق لذلك سنقوم بإستدعاء الروابط من تطبيق المدونة إلى الملف الرئيسي mysite/urls.py.

قم بفتح الملف التالي mysite/urls.py وقم بحذف جميع التعليقات الموجودة (السطور التي تبدأ بالعلامة # ) وقم بإضافة سطر الذي سيقوم بجلب blog.urls إلى ملف الروابط الرئيسي الخاص بنا .

هذه هي حالة الملف الأخيرة التي سيكون علبها

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'', include('blog.urls')),
]

سيقوم جانغو الأن بإعادة تحويل جميع الطلبات التي تقصد رابط’http://127.0.0.1:8000/‘ إلىblog.urls ويقوم بالبحث عن التعليمات الموجودة هناك .

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

blog.urls

قم بإنشاء ملف جديد تحت إسم urls.py على الدليل blog/urls.py  وأضف هذه السطور :


from django.conf.urls import url
from . import views

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

الأن يمكننا إضافة نمط الروابط الأول الخاص بنا :


urlpatterns = [
url(r'^$', views.post_list, name='post_list'),
]

كما يمكنك أن ترى بقد قمنا بتعيين view تحت ﻹسم post_list برابط $^ وهذا التعبير القياسي سيتطابق مع ^ في البداية متبوع ب $ في النهاية وهذا يعني أن السلسلة الفارغة فقط من ستتطابق مع هذا التعبير القياسي وبالتالي فإن الرابط التالي http://127.0.0.1:8000/ ستتطابق مع هذا التعبير وعندما نقوم بفتح هذا الرابط سيقوم جانغو بمعرفة أن views.post_list هو المكان المناسب للمستخدم الذي قام بفتح هذا الرابط .

أما الجزء name=’post_list’ فهو إسم الرابط الذي يستخدم لتعريف المشاهدة ويمكن أن يكون له نفس الإسم مع المشاهدة كا يمكن أن يكون له نفس أخر وسنستخدم  إسم الروابط في وقت لاحق في المشروع لذلك من الضروري أن تسمي كل رابط في التطبيق وحاول أن تجعلها أسماء بسيطة وسهلة التذكر .

الأن يمكننا فتح الرابط http://127.0.0.1:8000/ لنرى النتيجة

Screenshot from 2016-01-15 16:03:36

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

من خلال قراءة رسالة الخطأ يمكننا أن نلاحظ انها تقول بأننا لم نقم بتحديد المشاهد الخاصة ب ‘post_list ‘ وهذا يعني ان كل شيء جيد إلا أننا بحاجة إلى إنشاء المشاهد الخاصة بنا وهذا ما سنقوم به في المرة القادمة .

 


Viewing all articles
Browse latest Browse all 22462

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>