"تمت مراجعة هذه المقالة وتحديثها بأحدث إصدار من Django - مايو 2016"
في الجزء 1 من هذه السلسلة ، تعلمت كيفية تثبيت وتهيئة Django في بيئة افتراضية وقمت بإنشاء الهيكل العظمي لمشروعك الأول.
ثم في الجزء 2 أنشأنا تطبيقًا ونموذجًا لـ بريد الكائنات ، والتي قمنا بترحيلها لاحقًا إلى قاعدة البيانات. أخيرًا ، أوضحنا لك كيفية دمج التطبيق الذي تم إنشاؤه حديثًا في واجهة مستخدم إدارة Django.
هذه المقالات جزء من سلسلة Django:
تثبيت وتكوين إطار عمل ويب Django مع البيئات الافتراضية - الجزء الأول
مراجعة أساسيات Python وإنشاء أول تطبيق ويب باستخدام Django - الجزء الثاني
سنناقش في هذا الدليل النهائي كيفية الوصول إلى التطبيق باستخدام واجهة المستخدم وكيفية جعله مناسبًا للجوّال لجميع أنواع الأجهزة. ومع ذلك ، فلنبدأ.
لإنشاء كائنات من النوع بريد (تذكر أن هذا هو النموذج الذي حددناه في الجزء 2 من هذه السلسلة) ، سنستخدم واجهة إدارة Django.
تأكد من أن خادم الويب المدمج في Django يعمل على المنفذ 8000 (أو أي واحد آخر من اختيارك) عن طريق تشغيل الأمر التالي من الخارج myfirstdjangoproject الدليل:
# cd ~ / myfirstdjangoenv / myfirstdjangoproject. # python management.py runserver 0.0.0.0:8000.
افتح الآن متصفح الويب الخاص بك وأشر إلى http://ip-address: 8000 / مشرف
، ثم قم بتسجيل الدخول باستخدام بيانات الاعتماد التي قمت بإعدادها في المقالة السابقة وابدأ في كتابة منشور (والذي ، مرة أخرى ، سينشئ كائنًا من النوع بريد وأدخل البيانات المرتبطة في قاعدة البيانات الأساسية):
كرر العملية مرتين أو ثلاث مرات:
بعد إنشاء منشورتين ، دعنا نرى ما يتعين علينا القيام به لعرضها باستخدام متصفح الويب الخاص بنا.
رؤيتنا الأولى (~ / myfirstdjangoenv / myfirstdjangoproject / myblog / views.py) سيكون مسؤولاً عن تصفية الكل بريد الأشياء وإرجاع تلك حيث قيمة عندما تنشر أقل من أو يساوي التاريخ والوقت الحاليين (whenPublished__lte = timezone.now ()) بأمر تنازلي عندما تنشر، وهو نفس القول "الأحدث أولاً“.
يتم حفظ هذه الكائنات في متغير يسمى منشورات بشكل ملائم ، ويتم إرجاعها (يتم تحديدها على أنها جميع المشاركات) ليتم تضمينها في HTML ، كما سنرى في القسم التالي:
من django.shortcuts استيراد تصيير. من نماذج الاستيراد. من django.utils استيراد المنطقة الزمنية. def posts (request): posts = Post.objects.filter (whenPublished__lte = timezone.now ()). order_by ('- whenPublished') إرجاع عرض (request، 'myblog / posts.html'، {'allposts': posts} )
أخيرًا ، الشرطة السفلية المزدوجة في whenPublished__lte
أعلاه يستخدم لفصل حقل قاعدة البيانات (وقت النشر) من مرشح أو عملية (lte = أقل من أو يساوي).
بمجرد تحديد وجهة نظرنا الأولية ، دعنا نعمل على القالب المرتبط.
باتباع التوجيهات والمسارات الواردة في القسم السابق ، سنخزن القالب الأولي الخاص بنا بالداخل myblog / قوالب / myblog. هذا يعني أنك ستحتاج إلى إنشاء دليل باسم القوالب ودليل فرعي يسمى مدونتي:
# cd ~ / myfirstdjangoenv / myfirstdjangoproject / myblog. # mkdir -p قوالب / myblog.
سوف نسمي القالب posts.html
وأدخل الكود التالي فيه. ستلاحظ أننا نضيف مراجع عبر الإنترنت إلى مسج, التمهيدوخطوط FontAwesome و Google.
بالإضافة إلى ذلك ، قمنا بتضمين كود Python داخل أقواس متعرجة داخل HTML. يرجى ملاحظة أنه بالنسبة لكل كائن من نوع Post ، سنعرض عنوانه وتاريخ نشره ومؤلفه ، وأخيرًا نصه. أخيرًا ، سترى باللون الأحمر أننا نشير إلى العناصر التي تم إرجاعها عبر myblog / views.py:
حسنًا ، إليك posts.html ملف:
مدونتي
{٪ للنشر في allposts٪}{٪ endfor٪}{{post.title}}تم النشر في {{post.whenPublished}} بواسطة {{post.author}}.{{post.text | linebreaks}}
في ما سبق نموذج، ال فواصل الأسطر يستخدم عامل التصفية لاستبدال فواصل الأسطر في النص العادي بمكافئ HTML المقابل (
أو
بعد ذلك ، نحتاج إلى إعداد تعيين بين عناوين URL في تطبيقنا وطرق العرض المقابلة التي تُرجع البيانات. للقيام بذلك ، قم بإنشاء ملف باسم urls.py داخل مدونتي بالمحتوى التالي:
من django.conf.urls استيراد عنوان url. من. وجهات نظر الاستيراد. urlpatterns = [url (r '^ $'، views.posts، name = 'posts')،]
ال ص '^ $'
يستحق المزيد من التوضيح. الرائد ص
يوجه Django للتعامل مع السلسلة الموجودة داخل علامتي اقتباس مفردة كتعبير عادي.
بخاصة، ص '^ $'
يمثل سلسلة فارغة بحيث عندما نشير متصفحنا إلى http://ip-address: 8000
(ولا شيء غير ذلك) ، البيانات التي أرجعها المتغير المشاركات داخل views.py
(راجع القسم السابق) سيتم عرضها في صفحتنا الرئيسية:
أخيرًا وليس آخرًا ، سنقوم بتضمين urls.py ملف تطبيق المدونة الخاص بنا (~ / myfirstdjangoenv / myfirstdjangoproject / myblog / urls.py) داخل ال urls.py من مشروعنا الرئيسي (~ / myfirstdjangoenv / myfirstdjangoproject / myfirstdjangoproject / urls.py):
من استيراد django.conf.urls تتضمن عنوان url. من django.contrib استيراد admin urlpatterns = [url (r '^ admin /' ، تضمين (admin.site.urls)) ، url (r '' ، تشمل ('myblog.urls')) ،]
فلنبدأ بعد ذلك خادم الويب:
# cd ~ / myfirstdjangoenv / myfirstdjangoproject. # python management.py runserver 0.0.0.0:8000.
يجب أن نكون الآن قادرين على رؤية قوائم المشاركات التي أنشأناها سابقًا:
شكرا ل التمهيد، لا يزال بإمكانك الحصول على تصور ممتاز في جهاز أصغر:
دعنا الآن نراجع المفاهيم التي تناولناها في هذه المقالة وخلال هذه السلسلة:
1. كل نموذج يعرّف كائنًا ويخطط لجدول قاعدة بيانات ، حيث يتم تعيين حقولها بدورها إلى خصائص هذا الكائن. من ناحية أخرى ، أ نموذج يحدد واجهة المستخدم حيث سيتم عرض البيانات التي يتم إرجاعها بواسطة طريقة العرض.
لنفترض أننا نريد تعديل نموذجنا عن طريق إضافة حقل مسمى ملخص الى بريد كائن ، حيث سنخزن وصفًا موجزًا اختياريًا لكل منشور. دعونا نضيف السطر التالي في myblog / Models.py:
ملخص = نماذج. CharField (max_length = 350 ، فارغ = صحيح ، فارغ = صحيح)
كما تعلمنا في المقالة السابقة ، نحتاج إلى ترحيل التغييرات إلى قاعدة البيانات:
# python manager.py makemigrations myblog. # python management.py ترحيل myblog.
ثم استخدم واجهة الإدارة لتحرير المنشورات وإضافة ملخص موجز لكل منشور. أخيرًا ، استبدل السطر التالي في القالب (posts.html):
{{post.text | linebreaks}}
مع
{{post.summary}}
قم بتحديث الصفحة الرئيسية لمشاهدة التغييرات:
2. أ عرض تأخذ الوظيفة طلب HTTP وتقوم بإرجاع استجابة HTTP. في هذه المقالة ، مشاركات def (طلب) في views.py يقوم بإجراء مكالمة إلى قاعدة البيانات الأساسية لاسترداد جميع المشاركات. إذا أردنا استرداد جميع المشاركات مع كلمة غير مقبول في العنوان ، يجب أن نستبدل.
المشاركات = Post.objects.filter (whenPublished__lte = timezone.now ()) .order_by ('- whenPublished')
مع
المشاركات = Post.objects.filter (title__icontains = "ansible") .order_by ('- whenPublished')
من خلال فصل واجهة المستخدم عن منطق التطبيق في تطبيقات الويب ، يسهل Django مهام صيانة التطبيقات وتصعيدها.
3. إذا اتبعت الإرشادات الواردة في هذه السلسلة ، فيجب أن يكون هيكل مشروعك على النحو التالي:
myfirstdjangoenv / myfirstdjangoproject. ├── db.sqlite3. ├── إدارة. ├── مدونتي. │ ├── admin.py. │ ├── admin.pyc. │ ├── __init__.py. │ ├── __init __. │ ├── الهجرات. │ │ ├── 0001_initial.py. │ │ ├── 0001_initial.pyc. │ │ ├── __init__.py. │ └── __init __. │ ├── نماذج. │ ├── نماذج. │ ├── القوالب. │ │ └── مدونتي. │ │ └── posts.html. │ ├── الاختبارات. │ ├── urls.py. │ ├── urls.pyc. │ ├── views.py. │ └── views.pyc. └── myfirstdjangoproject ├── __init__.py ├── __init __. pyc ├── settings.py ├── settings.pyc ├── urls.py ├── urls.pyc ├── wsgi.py └── wsgi .pyc.
في حالة عدم عرض القائمة أعلاه بشكل صحيح في متصفحك ، فإليك لقطة شاشة لإخراج الأمر التالي:
# شجرة myfirstdjangoenv / myfirstdjangoproject.
على الرغم من أن كل هذه المفاهيم قد تبدو مخيفة بعض الشيء في البداية ، يمكنني أن أؤكد لكم أن Django تستحق كل الجهود اللازمة للتعرف عليها.
آمل أن يحفزك المثال الذي استخدمناه في هذه السلسلة لتقديمك إلى إطار عمل الويب الرائع هذا على معرفة المزيد. إذا كان الأمر كذلك ، فإن المسؤول وثائق Django (الذي يتم تحديثه باستمرار) هو أفضل مكان للبدء.
يمكنني أن أؤكد لك أن هناك الكثير في Django أكثر مما يمكننا تغطيته بشكل مناسب في سلسلة من المقالات ، لذلك لا تتردد في استكشافه والتعلم من خلال العمل!
لا تتردد في مراسلتنا بأسئلة أو اقتراحات باستخدام النموذج أدناه.