العودة إلى موقع برمج

ملخص Django

python
#1

البداية مع Django

بدايتك مع الويب

كما نعلم جميعا ان الويب ينقسم الي قسمين

  1. front-end
  2. back-end

لن نفصل كثيرآ في هذه الاشياء لكن لنعرف فقط المطلوب

لنبدا ب القسم اﻻول

front-end

او ما نعرفه بالوجهة الشئ الذي يتعامل معه المستخدم دون ان يعلم ماذا يجري في الخلف من تعقيدات فهو لايهمه التعقيدات ما يهمه هو سهولة الاستخدام وان يكون التطبيق الذي يعمل عليه مقبول المنظر

وتندرج تحته اللغات التالية

  1. html

  2. EJS

  3. PUG

  4. css

  5. bootstrap

  6. matrilize

  7. javaScript

  8. React

  9. Angular

  10. VueJs

ولا تعتبر html و css لغات برمجة وكل لغه لديها مكتبات خاصه بها تساعدك بعد ان تحترف اللغه سنكتفي بهذا.

القسم الثاني

back-end

في هذا القسم نهتم بما يحصل في الخلف من ارسال واستقبال وتخذين البيانات وحماية البيانات واشياء اخري

غالبآ هو الجزء الاصعب احياناً لانه يعتمد علي البرمجة والتفكير المنطقي لهذا

وتندرج تحته اللغات التالية

  1. JavaScript

  2. Nodejs

  3. express,

  4. Python

  5. Django

  6. Flask

  7. PHP

  8. Laravel

  9. Codeigniter

  10. Ruby

  11. Ruby on rails

طبعا هناك لغات اخري ولكن هذه هي الاشهر والاقوي وهذا هو الترتيب الخاص بها حسب كثرة استعمالها في 2018 مع الفريم وورك الخاصه بها .

الان كل اطر العمل السابقة تم تصميمها علي قواعد معينه سنشرح بعض هذه القواعد او كما يقولون development patterns

ملحوظه : كل frameworks التي تم ذكرها تستخدم هذه المفاهيم

اولا

MVC

Model View Contrloller

لنشرح هذا المفهوم بالتفصيل

Model

عباره عن مجموعة البيانات أو data في تطبيقك . مثلا لو لدينا تطبيق لعرض موديلات السيارات. كل المعلومات عن السياره مثل الماركه, اللون وغيرها تعتبر بيانات ويتم تخزينها في كلاس.

View

عباره عن الواجهه الظاهره لمستخدم تطبيقك.

Controller

هو الرابط او حلقة الوصل بين ال model & view اي بين البيانات والواجهات . فهو يقوم بتزويد ال view بالبيانات اللتي تحتاجها من model. ويقوم بتحديث ال model حين يدخل المستخدم بيانات جديده الى ال view
هذا الجزء يعتبر الدوال او method او ال action المستخدمه في برمجه العناصر كالازرار مثلا.

والمفهوم الثاني هو

ORM

Object Relational Mapper

هو باختصار تبسيط عملية الاتصال بقواعد البيانات . او هذا ما اراه انا اﻻن لنشرح ما هو

ال orm يعتمد في جوهره علي OOP المعروفه عندنا في البرمجة فهو يسمح لك ان تمثل الجداول التي تريد انشائها في قواعد البيانات علي Classes كل كلاس يمثل جدول واحد في قواعد البيانات وكل صفة خاصه بهذا الكلاس تمثل عمود في ذلك الجدول

مثال سريع لتتضح الفكره

class Band(models.Model):
“”“A model of a rock band.”""
name = models.CharField(max_length=200)
can_rock = models.BooleanField(default=True)

الان الكلاس الاسمه Band سيتحول الي جدول في قواعد البيانات والصفة name ستتحول الي عمود في هذا الجدول وهكذا

اﻻن ما هو جانقو

What is Django

هو اطار عمل عالي المستوي مكتوب بالبايثون مخصص لانشاء تطبيقات ويب بصورة سريعه وامنه جانغو يغطي الكثير من الاشياء بحيث يسمح لك بالتركيز علي بناء التطبيق الخاص بك فقط دون التشتت في اشياء اخري

لتبدا مع جانقو

يجب انيكون لديك خلفية في بعض الاشياء مثل

  • html
  • css
  • javaScript
  • the basic of python and oop concept

اذا كان لديك خلفية في هذه الاشياء فا انت مستعد للبدايه اما اذا لم يكن لديك خلفية يجب ان تتعلمها لانها ستسهل عليك الطريق حقآ

اﻻن هناك مصادر للبداية مع جانغو ساريكم اهمها :

الدوكيومنتيشن الخاص بالجانقو هو افضل صديق لك في بداية طريقك

Django Doc
لدينا الكثير من المواقع تقدم شروحات نصيه لجانقو منها التالي

  1. Django Girls
  2. GoDjango
  3. Mozila
    اﻻن افضل القنوات التي تشرح جانقو بالعربي واﻻنجليزية

1.Mhadi Ahmed
CodingEntrepreneurs 2
Max Goodridge 3
افضل الكتب لتعلم جانقو

Django for Beginners

Django 2.1

TOW Scoops of Django 1.11

هذه الكتب مدفوعه ولكن قد تجدو منها نسخ مجانية

هذا كل شئ عن جانقو باختصار

1 Like
#2

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

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

ما هي خيارات إعداد Django؟

جانغو مرن للغاية من حيث كيف وأين يمكن تثبيته وتكوينه. يمكن أن يكون Django:

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

ما هي أنظمة التشغيل التي تدعمه؟

يمكن تشغيل تطبيقات الويب Django على أي جهاز يمكنه تشغيل لغة البرمجة Python 3

على سبيل المثال Windows و MacOS و Linux / Unix و Solaris

لا الحصر. تقريبا أي جهاز كمبيوتر لديه الكفائه لتشغيل جانغو فهو حفيف وسريع جدآ

ما هو إصدار بايثون الذي يجب استخدامه؟

اوصي باستخدام أحدث إصدار متاح - في وقت كتابة هذا هو Python 3.7.1.

يمكن استخدام Python 3.5 أو أحدث إذا لزم الأمر (سيتم إسقاط دعم Python 3.5 في الإصدارات المستقبلية).

من اين يمكن ان اقوم بتنزيل Django؟

هناك ثلاثة أماكن لتنزيل Django:

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

قواعد البيانات التي يدعمها ؟

يدعم Django أربعة قواعد بيانات رئيسية (PostgreSQL و MySQL و Oracle و SQLite) ، وهناك مكتبات مجتمعية توفر مستويات مختلفة من الدعم لقواعد بيانات SQL و NoSQL. نوصي بأن تقوم بتحديد نفس قاعدة البيانات لكل من وضع اﻻطلاق والتطوير (على الرغم من قيام Django بإستخلاص العديد من الاختلافات في قاعدة البيانات باستخدام أداة تخطيط الكائنات ذات الصلة (ORM) ، ).

تثبيت بايثون 3:

من أجل استخدام Django ، سيكون عليك تثبيت Python على نظام التشغيل الخاص بك. إذا كنت تستخدم Python 3 ، فستحتاج أيضًا إلى أداة Python Package Index - pip3 - التي تستخدم لإدارة (تثبيت ، تحديث ، إزالة) حزم / مكتبات Python التي يستخدمها Django وتطبيقات Python الأخرى وهذه اﻻداة في الاصدارت الجديده من بايثون اصبحت تاتي مدمجه مع اللغه .

للحصول علي البايثون توجه الي الموقعي الرئيسي لبايثون
في الموقع www.python.org

Ubuntu 18.04

يتضمن Ubuntu Linux 18.04 LTS Python 3.6.6 افتراضيًا. يمكنك تأكيد ذلك عن طريق تشغيل الأمر التالي في الطرفيه :

python3 -V
Python 3.6.6

ومع ذلك ، فإن أداة Python Package Index التي ستحتاج إليها لتثبيت الحزم الخاصة بـ Python 3 (بما في ذلك Django) غير متوفرة بشكل افتراضي. يمكنك تثبيت pip3 في الطرفيه باستخدام:

sudo apt install python3-pip

macOS

يمكنك بسهولة تثبيت Python 3 (مع أداة pip3)

قم بتنزيل المثبت المطلوب:

  • انتقل إلى `https://www.python.org/downloads
  • حدد الزر تنزيل Python 3.7.1 (قد يختلف رقم الإصدار الثانوي الدقيق).
  • حدد موقع الملف باستخدام Finder ، ثم انقر نقرًا مزدوجًا فوق ملف الحزمة. بعد مطالبات التثبيت.

يمكنك الآن تأكيد التثبيت الناجح عن طريق التحقق من Python 3 كما هو موضح أدناه:

python3 -V
Python 3.7.1

Windows 10

لا يقوم Windows بتضمين Python بشكل افتراضي ، ولكن يمكنك تثبيته بسهولة (مع أداة pip3)
قم بتنزيل المثبت المطلوب:

  • انتقل إلى `https://www.python.org/downloads
    حدد الزر تنزيل Python 3.7.1 (قد يختلف رقم الإصدار الثانوي الدقيق).
  • تثبيت Python بالنقر المزدوج على الملف الذي تم تنزيله واتباع مطالبات التثبيت
  • تأكد من تحديد المربع المسمى “إضافة بايثون إلى PATH”

يمكنك بعد ذلك التحقق من تثبيت Python 3 عن طريق إدخال النص التالي في موجه الأوامر:

py -3 -V
Python 3.7.1

استخدام Django داخل بيئة بايثون الافتراضية

إن المكتبات التي سنستخدمها لإنشاء بيئات افتراضية هي virtualenvwrapper

virtualenvwrapper = (Linux و macOS)

virtualenvwrapper-win = (Windows) ،

والتي بدورها تستخدم أداة virtualenv

والتي تنشئ بيئة افتراضيه داخل بايثون بحيث يظل النظام الاساسي الخاص بك بعيدآ عن اضرار قد تسببها اللغه او احدي مكتباتها.

تثبيت برنامج البيئة الافتراضية:

بيئة أوبونتو الافتراضية:

بعد تثبيت Python و pip ، يمكنك تثبيت virtualenvwrapper (والذي يتضمن virtualenv). يمكن العثور على دليل التثبيت الرسمي هنا ، أو اتباع الإرشادات أدناه.

قم بتثبيت الأداة باستخدام pip3:

sudo pip3 install virtualenvwrapper

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

export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS=’ -p /usr/bin/python3 ’
export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh

ثم إعادة تحميل ملف بدء التشغيل عن طريق تشغيل الأمر التالي في المحطة:

source ~/.bashrc

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

virtualenvwrapper.user_scripts creating /home/ubuntu/.virtualenvs/premkproject
virtualenvwrapper.user_scripts creating /home/ubuntu/.virtualenvs/postmkproject

virtualenvwrapper.user_scripts creating /home/ubuntu/.virtualenvs/preactivate
virtualenvwrapper.user_scripts creating /home/ubuntu/.virtualenvs/postactivate
virtualenvwrapper.user_scripts creating /home/ubuntu/.virtualenvs/get_env_details

إعداد بيئة macOS

إن إعداد virtualenvwrapper على macOS يكاد يكون هو نفسه في Ubuntu (مرة أخرى ، يمكنك اتباع الإرشادات من دليل التثبيت الرسمي أو أدناه.

تثبيت virtualenvwrapper (وتجميع virtualenv) باستخدام النقطة كما هو موضح.

sudo pip3 install virtualenvwrapper

ثم أضف الأسطر التالية إلى نهاية ملف بدء التشغيل shell الخاص بك.

export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh

ثم إعادة تحميل ملف بدء التشغيل عن طريق تشغيل الأمر التالي في المحطة:

source ~/.bash_profile

إعداد بيئة افتراضية لـ Windows 10

يعد تثبيت virtualenvwrapper-win أبسط من إعداد virtualenvwrapper لأنك لا تحتاج إلى تكوين المكان الذي تخزن فيه الأداة معلومات بيئة افتراضية (توجد قيمة افتراضية). كل ما عليك القيام به هو تشغيل الأمر التالي في موجه الأوامر:

pip3 install virtualenvwrapper-win

انشاء بيئة افتراضيه

الآن يمكنك إنشاء بيئة افتراضية جديدة باستخدام الأمر mkvirtualenv.

mkvirtualenv my_django_environment

Running virtualenv with interpreter /usr/bin/python3

virtualenvwrapper.user_scripts creating /home/ubuntu/.virtualenvs/t_env7/bin/get_env_details
(my_django_environment) ubuntu@ubuntu:~$

في خرجت من البيئة الافتراضيه وتريد تفعيل البيئة الافتراضيه تنفذ اﻻمر :

workon my_django_environment

تثبيت Django

اﻻن تأكد من انك داخل البيئة اﻻفتراضيه التي قمت بانشائها وانها مفعله لديك نفذ اﻻمر التالي:

pip3 install django

سيتم تحميل اخر اصدار من جانغو

او حمل اصدار الدورة برمج.كوم

pip3 install django==1.11.7

يمكنك اختبار تثبيت Django عن طريق تشغيل الأمر التالي (هذا فقط يختبر أن بايثون يمكن أن تجد وحدة Django):

Linux/macOS

python3 -m django --version
2.1.5

Windows

py -3 -m django --version
2.1.5

اختبار نجاح عملية التثبيت

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

mkdir django_test
cd django_test

يمكنك بعد ذلك إنشاء موقع هيكل عظمي جديد يسمى “mytestsite” باستخدام أداة django-admin كما هو موضح. بعد إنشاء الموقع ، يمكنك الانتقال إلى المجلد حيث ستجد البرنامج النصي الرئيسي لإدارة المشاريع ، والذي يسمى manage.py.

django-admin startproject mytestsite
cd mytestsite

يمكننا تشغيل خادم الويب الخاص بالتطوير من داخل هذا المجلد باستخدام manage.py وأمر runserver ، كما هو موضح.

$ python3 manage.py runserver
Performing system checks…

System check identified no issues (0 silenced).

You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run ‘python manage.py migrate’ to apply them.

December 16, 2018 - 07:06:30
Django version 2.1.5, using settings ‘mytestsite.settings’

بمجرد تشغيل الخادم ، يمكنك عرض الموقع بالانتقال إلى عنوان URL التالي على متصفح الويب المحلي الخاص بك:http://127.0.0.1:800`

your first django application

1 Like
#3

أنشاء المشروع من البداية:

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

mkdir django_projects
cd django_projects

قم بإنشاء المشروع الجديد باستخدام الأمر django-admin startproject كما هو موضح ، ثم انتقل إلى المجلد.

django-admin startproject locallibrary
cd locallibrary

تقوم أداة django-admin بإنشاء بنية مجدلدات / ملفات كما هو موضح أدناه:

locallibrary/
manage.py
locallibrary/
init.py
settings.py
urls.py
wsgi.py

يجب أن يظهر دليل العمل الحالي لدينا على النحو التالي:

…/django_projects/locallibrary/

  • المجلد الفرعي لمشروع المكتبة المحلية هو نقطة الدخول لموقع الويب:

  • init.py ملف هو ملف فارغ يرشد بايثون لمعالجة هذا الدليل كحزمة بايثون.

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

  • يعرّف urls.py تعيينات عنوان url-view الخاصة بالموقع. على الرغم من أن هذا قد يحتوي على كل شفرة تعيين عنوان url ، إلا أنه من المعتاد تفويض بعض التعيينات لتطبيقات معينة ، كما سترى لاحقًا.

  • يُستخدم wsgi.py لمساعدة تطبيق Django في الاتصال بخادم الويب. يمكنك التعامل معها كقاعدة نمطية.

  • يتم استخدام البرنامج النصي manage.py لإنشاء تطبيقات ، والعمل باستخدام قواعد البيانات ، وبدء تشغيل خادم الويب الخاص بالتطوير.

إنشاء تطبيق الكتالوج:

بعد ذلك ، قم بتشغيل الأمر التالي لإنشاء تطبيق الكتالوج الذي سيعيش داخل مشروع المكتبة المحلية (يجب تشغيل هذا في نفس المجلد الذي يوجد فيه ملف إدارة مشروعك manage.py):

python3 manage.py startapp catalog

تقوم الأداة بإنشاء مجلد جديد وتعبئته بملفات الأجزاء المختلفة من التطبيق (كما هو موضح باللون الغامق أدناه). يتم تسمية معظم الملفات على نحو مفيد بعد الغرض منها (على سبيل المثال ، يجب تخزين الملفات الشخصية في طرق العرض views ، و نماذج قواعد البيانات في models.py ، والاختبارات في tests.py ، وتكوين موقع الإدارة في admin.py ، وتسجيل التطبيق في apps.py) وتحتوي على بعض التعليمات البرمجية المتعارف عليها للحد الأدنى من العمل مع الكائنات المرتبطة.

يجب أن يبدو الآن دليل المشروع المحدث كما يلي:

locallibrary/
manage.py
locallibrary/
catalog/
admin.py
apps.py
models.py
tests.py
views.py
init.py
migrations/

بالإضافة إلى ذلك لدينا الآن:

  • مجلد ترحيلات ، يُستخدم لتخزين “عمليات الترحيل” - وهي ملفات تتيح لك تحديث قاعدة البيانات تلقائيًا أثناء تعديل النماذج.

  • ملف init فارغ تم إنشاؤه هنا حتى يتعرف Django / Python على المجلد كحزمة Python ويسمح لك باستخدام عناصره داخل أجزاء أخرى من المشروع.

تسجيل تطبيق الكتالوج في لوحة التحكم:

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

افتح ملف إعدادات المشروع django_projects/locallibrary/locallibrary/settings.py وابحث عن التعريف لقائمة INSTALLED_APPS. ثم أضف سطرًا جديدًا في نهاية القائمة ، كما هو موضح باللون الغامق أدناه.

INSTALLED_APPS = [
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘catalog.apps.CatalogConfig’,
]

يحدد السطر الجديد كائن تكوين التطبيق (CatalogConfig) الذي تم إنشاؤه لك في /locallibrary/catalog/apps.py عندما قمت بإنشاء التطبيق.

تحديد قاعدة البيانات:

هذه هي النقطة التي ستقوم فيها عادة بتحديد قاعدة البيانات التي سيتم استخدامها في المشروع - من المنطقي استخدام نفس قاعدة البيانات للتطوير والإنتاج حيثما أمكن ، من أجل تجنب الاختلافات الطفيفة في السلوك. يمكنك معرفة الخيارات المختلفة في قواعد البيانات (Django docs).

سنستخدم قاعدة بيانات SQLite لهذا المثال ، لأننا لا نتوقع أن تتطلب الكثير من الوصول المتزامن على قاعدة بيانات تجريبية ، وأيضا لأنها لا تتطلب أي عمل إضافي لإعداد! يمكنك معرفة كيفية تكوين قاعدة البيانات هذه في settings.py :

DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.sqlite3’,
‘NAME’: os.path.join(BASE_DIR, ‘db.sqlite3’),
}
}

نظرًا لأننا نستخدم SQLite ، لا نحتاج إلى إجراء أي إعداد إضافي هنا. هيا لنذهب!

ملحوظه: ستجد هذه اﻻعدادات موجوده في الاصل لذا لا تقم بتغيير اي شئ فيها حتي تعرف كيف تعدل عليها .

إعدادات المشروع الأخرى:

يتم أيضًا استخدام الملف settings.py لتهيئة عدد من الإعدادات الأخرى ، ولكن في هذه المرحلة ، قد ترغب فقط في تغيير TIME_ZONE - يجب جعل ذلك مساويًا لسلسلة من مناطق التوقيت القياسي لقاعدة بيانات tz (العمود TZ في الجدول يحتوي على القيم التي تريدها). غيّر قيمة TIME_ZONE إلى واحدة من هذه السلاسل المناسبة لمنطقتك الزمنية ، على سبيل المثال:

TIME_ZONE = ‘Europe/London’

هناك نوعان من الإعدادات الأخرى لن يتم تغييرهما الآن ، ولكن يجب أن تكون على علم بما يلي:

  • SECRET_KEY.
  • هذا هو المفتاح السري الذي يستخدم كجزء من استراتيجية أمن موقع Django. إذا كنت لا تحمي هذا الرمز في التطوير ، فستحتاج إلى استخدام رمز مختلف (ربما قرأته من متغير بيئة أو ملف) عند وضعه في حيز الإنتاج.
  • DEBUG.
  • يعمل ذلك على تمكين سجلات تصحيح الأخطاء لعرضها على الخطأ ، بدلاً من استجابات رمز حالة HTTP. يجب تعيين هذا على False على الإنتاج لأن معلومات التصحيح مفيدة للمهاجمين ، ولكن في الوقت الحالي يمكننا الاحتفاظ بها إلى True.

اعداد رابط عنوان URL:

يتم إنشاء موقع الويب باستخدام ملف مخطط عناوين URL (urls.py) في مجلد المشروع. بينما يمكنك استخدام هذا الملف لإدارة جميع عمليات تعيين عناوين URL ، فمن المعتاد تأجيل عمليات التعيين إلى التطبيق المرتبط.

افتح locallibrary / locallibrary / urls.py ولاحظ النص التعليمي الذي يشرح بعض طرق استخدام أداة تعيين عناوين URL.

“”"locallibrary URL Configuration

The urlpatterns list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.1/topics/http/urls/
Examples:
Function views

  1. Add an import: from my_app import views
  2. Add a URL to urlpatterns: path(’’, views.home, name=‘home’)
    Class-based views
  3. Add an import: from other_app.views import Home
  4. Add a URL to urlpatterns: path(’’, Home.as_view(), name=‘home’)
    Including another URLconf
  5. Import the include() function: from django.urls import include, path
  6. Add a URL to urlpatterns: path(‘blog/’, include(‘blog.urls’))
    “”"
    from django.contrib import admin
    from django.urls import path

urlpatterns = [
path(‘admin/’, admin.site.urls),
]

تتم إدارة تعيينات عنوان URL من خلال متغير urlpatterns ، وهي قائمة Python لوظائف المسار (). تقوم كل دالة path () إما بربط نمط عنوان URL إلى طريقة عرض محددة ، والتي سيتم عرضها عند مطابقة النمط ، أو مع قائمة أخرى من رمز اختبار نمط عنوان URL (في هذه الحالة الثانية ، يصبح النمط “عنوان URL الأساسي” للأنماط المعرفة في الوحدة النمطية المستهدفة). تحدد قائمة urlpatterns في البداية وظيفة واحدة تحدد جميع عناوين URL بنمط admin / إلى الوحدة admin.site.urls ، التي تحتوي على تعريفات تعيين عنوان URL الخاصة بتطبيق الإدارة.

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

وبعد ذلك تضمين الملف السابق داخل ملف urls الرئيسي بالمشروع اضف الكود التالي:

Use include() to add paths from the catalog application

from django.urls import include
from django.urls import path

urlpatterns += [
path(‘catalog/’, include(‘catalog.urls’)),
]

الآن دعنا نعيد توجيه عنوان URL الجذري لموقعنا (أي 127.0.0.1:8000) إلى عنوان URL 127.0.0.1:8000/catalog/ ؛ هذا هو التطبيق الوحيد الذي سنستخدمه في هذا المشروع ، لذلك قد نكون كذلك. للقيام بذلك ، سنستخدم وظيفة عرض خاصة (RedirectView) ، والتي تأخذ كوسيطة أولى عنوان URL النسبي الجديد لإعادة التوجيه إلى (/ catalog /) عندما يتم مطابقة نمط عنوان URL المحدد في وظيفة المسار () (الجذر عنوان URL ، في هذه الحالة).

أضف الأسطر التالية ، مرة أخرى إلى أسفل الملف:

from django.views.generic import RedirectView
urlpatterns += [
path(’’, RedirectView.as_view(url=’/catalog/’, permanent=True)),
]

اترك المسار اﻻول للدالة فارغ ,للتوضيح “/”. إذا كتبت بالشكل التالي كـ ‘/’ سيعطيك Django التحذير التالي عند بدء تشغيل الخادم :

System check identified some issues:

WARNINGS:
?: (urls.W002) Your URL pattern ‘/’ has a route beginning with a ‘/’.
Remove this slash as it is unnecessary.
If this pattern is targeted in an include(), ensure the include() pattern has a trailing ‘/’.

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

Use static() to add url mapping to serve static files during development (only)

from django.conf import settings
from django.conf.urls.static import static

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

يجب ان يكون ملف urls الرئيسي بالشكل التالي:

urlpatterns = [
path(‘admin/’, admin.site.urls),
path(‘catalog/’, include(‘catalog.urls’)),
path(’’, RedirectView.as_view(url=’/catalog/’, permanent=True)),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

تجربة الموقع اذا كان يعمل ام لا:

عند هذه النقطة لدينا مشروع كامل الهيكل العظمي. لا يقوم الموقع بأي شيء حتى الآن ، ولكن قيمته جارية للتأكد من عدم حدوث أي من التغييرات التي قمنا بها.

تشغيل عمليات ترحيل قاعدة البيانات (migrations):

عندما أنشأنا موقع الويب ، أضاف Django تلقائيًا عددًا من النماذج لاستخدامها من قِبل قسم المشرفين بالموقع (والذي سننظر إليه لاحقًا). قم بتشغيل الأوامر التالية لتعريف الجداول لتلك النماذج في قاعدة البيانات (تأكد من أنك في الدليل الذي يحتوي على manage.py):

python3 manage.py makemigrations
python3 manage.py migrate

makemigrations:

يقوم بانشاء ملف ترحيل لكل التطبيقات الموجودخ لديك في المشروع ويمكن ايضا تحديد تطبيق واحد فقط يقوم بانشاء ملف ترحيل ليخطر قاعدة الباينات باسماء الجداول واﻻعمده ونوع العلاقه بين الجداول وهكذا

migrate:

يقوم هذا اﻻمر باجراء التعديلات الموجوده في ملف الترحيل وتطبيقها فعليا في قاغدة البيانات بحيث ينشئ جداول واعمدة وعلاقات بحسب التعليمات التي تم كتابتها في ملف الترحيل:

تشغيل الموقع:

أثناء التطوير ، يمكنك اختبار موقع الويب من خلال عرضه أولاً باستخدام خادم الويب الخاص بالتطوير ، ثم عرضه على متصفح الويب المحلي الخاص بك.

قم بتشغيل خادم الويب الخاص بالتطوير عن طريق استدعاء الأمر runserver (في نفس المسار معـ manage.py):

python3 manage.py runserver

Performing system checks…

System check identified no issues (0 silenced).
August 15, 2018 - 16:11:26
Django version 2.1, using settings ‘locallibrary.settings’
Starting development server at `http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

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

لا تقلق! لانه من المتوقع ظهور هذا الخأ ﻻننا لم نقم باتشاء اي صفحه وربطها مع عنوان URL الذي تراه امامك

في هذه المرحلة ، نعرف أن جانقو يعمل!

1 Like
#4

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

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

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

تسجيل النماذج | Registering models

أولاً ، افتح admin.py في تطبيق الكتالوج (/locallibrary/catalog/admin.py). يبدو الآن مثل هذا - لاحظ أنه يستورد بالفعل django.contrib.admin:

from django.contrib import admin

Register your models here.

هذا الرمز يستورد النماذج ببساطة ثم يدعو admin.site.register لتسجيل كل منها.

from catalog.models import Author, Genre, Book, BookInstance

admin.site.register(Book)
admin.site.register(Author)
admin.site.register(Genre)
admin.site.register(BookInstance)

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

انشاء مستخدم متميز | Creating a superuser

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

اتصل بالأمر التالي ، في نفس الدليل مثل manage.py ، لإنشاء المستخدم المتميز. ستتم مطالبتك بإدخال اسم مستخدم وعنوان بريد إلكتروني وكلمة مرور قوية.

python3 manage.py createsuperuser

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

python3 manage.py runserver

تسجيل الدخول واستخدام الموقع | Logging in and using the site

لتسجيل الدخول إلى الموقع ، افتح عنوان / admin URL (على سبيل المثال http://127.0.0.1:8000/admin) وأدخل بيانات اعتماد المستخدم وبيانات كلمة المرور الخاصة بالمستخدم الجديد (ستتم إعادة توجيهك إلى صفحة تسجيل الدخول ، ثم العودة إلى / admin URL بعد إدخال بياناتك).

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

Admin site

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

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

Add a book

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

books

من هذه القائمة ، يمكنك حذف الكتب عن طريق تحديد مربع الاختيار بجوار الكتاب الذي لا تريده ، وتحديد delete… action من القائمة المنسدلة الإجراء ، ثم الضغط على الزر Go. يمكنك أيضًا إضافة كتب جديدة بالضغط على الزر ADD BOOK.

يمكنك تحرير كتاب عن طريق تحديد اسمه في الرابط. تعد صفحة تعديل الكتاب الموضحة أدناه مطابقة تقريبًا لصفحة “إضافة”. الاختلافات الرئيسية هي عنوان الصفحة (تغيير الكتاب) وإضافة الزر “حذف” و “التاريخ” و “عرض على الموقع” (يظهر هذا الزر الأخير لأننا قمنا بتعريف طريقة get_absolute_url () في النموذج الخاص بنا).

Edit book

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

ما لا تملكه هو أي مثيلات كتاب ، لأن هذه لا يتم إنشاؤها من الكتب (على الرغم من أنه يمكنك إنشاء كتاب من BookInstance - هذه هي طبيعة الحقل ForeignKey). انتقل مرة أخرى إلى الصفحة الرئيسية واضغط على الزر Add المقترن لعرض شاشة Add book instance أدناه. لاحظ الرقم التعريفي الكبير والفريد عالميًا ، والذي يمكن استخدامه لتعريف نسخة واحدة من كتاب في المكتبة بشكل منفصل.

book instance model

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

هذا هو! لقد تعلمت الآن كيفية إعداد موقع الإدارة واستخدامه. لقد قمت أيضًا بإنشاء سجلات لكل من Book و BookInstance و Genre و Author التي سنتمكن من استخدامها بمجرد إنشاء طرق العرض والقوالب الخاصة بنا.

اعدادات متقدمه | Advanced configuration

يقوم Django بعمل جيد لإنشاء موقع مسؤول أساسي باستخدام المعلومات من النماذج المسجلة:

  • يحتوي كل نموذج على قائمة بالسجلات الفردية ، التي تم تحديدها بواسطة السلسلة التي تم إنشاؤها باستخدام طريقة __str __ () للطراز ، ومربوطة بعروض / نماذج التفاصيل للتحرير. بشكل افتراضي ، يحتوي هذا العرض على قائمة إجراءات في الأعلى يمكنك استخدامها لإجراء عمليات حذف مجمعة في السجلات.
  • تحتوي نماذج سجل تفاصيل النموذج لتحرير وإضافة السجلات على جميع الحقول الموجودة في النموذج ، والتي يتم وضعها عموديًا في ترتيب التصريح الخاص بها.

يمكنك أيضًا تخصيص الواجهة لتسهيل استخدامها. بعض الأشياء التي يمكنك القيام بها هي:

  • طرق عرض القائمة:

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

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

تسجيل فئة النماذج | Register a ModelAdmin class

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

لنبدأ بنموذج المؤلف. افتح admin.py في تطبيق الكتالوج (/locallibrary/catalog/admin.py). قم بالتعليق على تسجيلك الأصلي (بادئة بـ #) لنموذج المؤلف:

admin.site.register(Author)

الآن إضافة AuthorAdmin جديد والتسجيل كما هو موضح أدناه.

Define the admin class

class AuthorAdmin(admin.ModelAdmin):
pass

Register the admin class with the associated model

admin.site.register(Author, AuthorAdmin

الآن سنقوم بإضافة فئات ModelAdmin للكتاب ، BookInstance. نحتاج مرة أخرى للتعليق على التسجيلات الأصلية:

admin.site.register(Book)

admin.site.register(BookInstance)

الآن لإنشاء وتسجيل النماذج الجديدة ؛ لغرض هذا العرض التوضيحي ، سنستخدم بدلاً من ذلك ديكورregister لتسجيل النماذج (وهذا يفعل نفس الشيء تمامًا مثل بناء admin.site.register ()):

Register the Admin classes for Book using the decorator

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
pass

Register the Admin classes for BookInstance using the decorator

@admin.register(BookInstance)
class BookInstanceAdmin(admin.ModelAdmin):
pass

في الوقت الحالي ، تكون جميع فئات المشرف لدينا فارغة (انظر التمريرة) حتى لا يتغير سلوك المشرف! يمكننا الآن توسيع هذه لتعريف السلوك الإداري الخاص بنا النموذجية.

اعداد طرق عرض القائمة | Configure list views

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

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

class AuthorAdmin(admin.ModelAdmin):
list_display = (‘last_name’, ‘first_name’, ‘date_of_birth’, ‘date_of_death’)

انتقل الآن إلى قائمة المؤلفين في موقعك على الويب.
بالنسبة لنموذج الكتاب ، سنقوم أيضًا بعرض المؤلف والنوع. المؤلف هو عبارة عن علاقة حقل ForeignKey (واحد إلى واحد) ، وبالتالي سيتم تمثيله بقيمة __str __ () للسجل المرتبط. استبدل فئة BookAdmin بالإصدار أدناه.

class BookAdmin(admin.ModelAdmin):
list_display = (‘title’, ‘author’, ‘display_genre’)

للأسف ، لا يمكننا تحديد حقل النوع بشكل مباشر في list_display لأنه برنامج ManyToManyField (يمنع Django ذلك لأنه سيكون هناك وصول كبير لقاعدة البيانات “التكلفة” في القيام بذلك). بدلاً من ذلك ، سنقوم بتعريف دالة display_genre للحصول على المعلومات كسلسلة (هذه هي الوظيفة التي اتصلنا بها أعلاه ؛ وسنقوم بتعريفها أدناه).

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

def display_genre(self):
“”“Create a string for the Genre. This is required to display genre in Admin.”""
return ', '.join(genre.name for genre in self.genre.all()[:3])

display_genre.short_description = ‘Genre’

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

إضافة قائمة فلاتر البحث | Add list filters

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

class BookInstanceAdmin(admin.ModelAdmin):
list_filter = (‘status’, ‘due_back’)

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

search list

تنظيم تخطيط عرض التفاصيل | Organise detail view layout

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

السيطرة على المجالات التي يتم عرضها ووضعها

قم بتحديث فئة AuthorAdmin الخاصة بك لإضافة سطر الحقول ، كما هو موضح أدناه (بالخط الغامق):

class AuthorAdmin(admin.ModelAdmin):
list_display = (‘last_name’, ‘first_name’, ‘date_of_birth’, ‘date_of_death’)
fields = [‘first_name’, ‘last_name’, (‘date_of_birth’, ‘date_of_death’)]

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

في موقعك على الويب ، انتقل إلى عرض تفاصيل المؤلف
تقسيم عرض التفاصيل

يمكنك إضافة “أقسام” لتجميع معلومات النماذج ذات الصلة في نموذج التفاصيل ، باستخدام سمة الحقول.

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

@admin.register(BookInstance)
class BookInstanceAdmin(admin.ModelAdmin):
list_filter = (‘status’, ‘due_back’)

fieldsets = (
(None, {
‘fields’: (‘book’, ‘imprint’, ‘id’)
}),
(‘Availability’, {
‘fields’: (‘status’, ‘due_back’)
}),
)

يحتوي كل قسم على عنوانه الخاص (أو لا شيء ، إذا كنت لا تريد عنوانًا) ومجموعة مضافة من الحقول في القاموس - يكون التنسيق معقدًا ، ولكن يسهل فهمه إلى حد ما إذا نظرت إلى جزء الشفرة مباشرة .

انتقل الآن إلى عرض مثيل الكتاب في موقعك على الويب ؛ يجب أن يظهر النموذج كما هو موضح أدناه:

custom detail view

التعديل المضمن للسجلات المرتبطة | Inline editing of associated records

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

يمكنك القيام بذلك عن طريق التصريح عن الحروف ، من النوع TabularInline (تخطيط horizonal) أو StackedInline (تخطيط عمودي ، مثل تخطيط النموذج الافتراضي). يمكنك إضافة معلومات BookInstance مضمنة إلى تفاصيل الكتاب الخاص بنا عن طريق إضافة الأسطر أدناه بخط غامق بالقرب من BookAdmin:

class BooksInstanceInline(admin.TabularInline):
model = BookInstance

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = (‘title’, ‘author’, ‘display_genre’)
inlines = [BooksInstanceInline]

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

1 Like
#5

Django Tips #1 Model Manager
هي الواجهة التي يتم من خلالها توفير عمليات استعلام قاعدة البيانات لنماذج جانقو.
يوجد مدير واحد على الأقل لكل نموذج في تطبيق Django.
لنفترض ان لدينا نموزج Document تم انشائه مع مدير خاص به بالاسم DocumentManager
from django.db import models

class DocumentManager(models.Manager):
def pdfs(self):
return self.filter(file_type=‘pdf’)

def smaller_than(self, size):
    return self.filter(size__lt=size)

class Document(models.Model):
name = models.CharField(max_length=30)
size = models.PositiveIntegerField(default=0)
file_type = models.CharField(max_length=10, blank=True)

objects = DocumentManager()

اﻻن لاسترجاع كل ملفات ال pdf سنكتب اﻻستعلام التالي
Document.objects.pdfs()

طريقة رائعة اليس كذلك ! لكن مع ذالك لا يمكننا ربط اﻻستعلامات مع بعضها البعض اي اذا حاولنا تطبيق اﻻستعلام التالي لن يعمل
Document.objects.pdfs().smaller_than(1000)
سيظهر الخطاء التالي
AttributeError: ‘QuerySet’ object has no attribute ‘smaller_than’
لكي نجعله يعمل يجب ان نعيد صياغة واجهة المدير الخاص بنا بالصوره التالية:

class DocumentQuerySet(models.QuerySet):
def pdfs(self):
return self.filter(file_type=‘pdf’)

def smaller_than(self, size):
    return self.filter(size__lt=size)

class DocumentManager(models.Manager):
def get_queryset(self):
return DocumentQuerySet(self.model, using=self._db) # Important!

def pdfs(self):
    return self.get_queryset().pdfs()

def smaller_than(self, size):
    return self.get_queryset().smaller_than(size)

class Document(models.Model):
name = models.CharField(max_length=30)
size = models.PositiveIntegerField(default=0)
file_type = models.CharField(max_length=10, blank=True)

objects = DocumentManager()

كما تلاحظ لقد اضفنا DocumentQuerySet خاص بالاستعلام لقد قمنا باعادة كتابة ال Queryset حتي نستطيع ربط الدوال في واجهة المدير لدينا مع بعضها البعض لتعمل بصورة عادية كاي استعلام عادي اﻻن لنجرب ان نستعملهم مع بعضهم البعض :
Document.objects.pdfs().smaller_than(1000).exclude(name=‘Article’).order_by(‘name’)
ستلاحظ انه يعمل ومن دون مشاكل يمكننا ايضا ان نكتب استعلامات مخصصه لنا ونستدعيها في النموزج الخاص بنا كامدير للاستعلامات بالصوره التالية :
class DocumentQuerySet(models.QuerySet):
def pdfs(self):
return self.filter(file_type=‘pdf’)

def smaller_than(self, size):
    return self.filter(size__lt=size)

class Document(models.Model):
name = models.CharField(max_length=30)
size = models.PositiveIntegerField(default=0)
file_type = models.CharField(max_length=10, blank=True)

objects = DocumentQuerySet.as_manager()

كما تلاحظ قمنا بكتابة DocumentQuerySet فقط واستدعيناه في النموزج الخاص بنا كاواجهة
مدير DocumentQuerySet.as_manager
اذا كان مشروعك صغر فالافضل ان تبقي علي Model Manager وال Queryset داخل ملف ال model اما اذا كان المشروع كبير او سينمو في المستقبل فالافضل ان تبقيها في ملف منفصل بالاسم managers.py
هذا كل ما لدينا اليوم عن Model Manager لتفاصيل اكثر انظر الي Documentation

#6

Django Tips #2 Django Generic Relations
ربما تكون قد تعرضت او شاهدت شخص يستخدم ContentType في احدي الدورات او احدي التطبيقات التي قمت بتنزليها من Github ولم تفهم طريقة عملة او ماذا يفعل تحديدا .
اليوم سنتعرف علي ContentType وكيفية استخدامة وتطبيق مثال سريع باستخدامه .
هو في الاساس تطبيق مدمج ياتي مع Django اﻻن اذا قمت بانشاء مشروع جديد واذا لم تغيير في ملف settings الذي يتم توليده عن طريق Django يجب ان ترا هذا السطر في التطبيقات المسطبة لديك
INSTALLED_APPS = [

  'django.contrib.contenttypes',
  
  ... ]

يسمح لك هذا بانشاء علاقات عامة بين نماذج قواعد البيانات الخاصه بك او ما يعرف بال models
طريقة عملة هي نفس طريقة عمل ال Foreign Key لذا سنقوم بتطبيق الطريقتين ربط عن طريق Foreign Key ومره اخري عن طريق ContentType
اﻻن لنفترض ان لدينا نموذج خاص بالمقالات وهو التالي :
class Post(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
title = models.CharField(max_length=120)
slug = models.SlugField(unique=True)
image = models.ImageField(upload_to=upload_location,
null=True, blank=True,)

content = models.TextField()
draft = models.BooleanField(default=False)
publish = models.DateField(auto_now=False, auto_now_add=False)
read_time =  models.IntegerField(default=0)
updated = models.DateTimeField(auto_now=True, auto_now_add=False)
timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)


def __str__(self):
    return self.title

ونريد انشاء نموذج خاص بالتعليقات لربطة مع النموذج السابق بحيث يستطيع المستخدم التعليق علي مقال لنستخدم اولا الطريقة المعتادة وهي الربط باستخدام Foreign Key
class Comment(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
post = models.ForeignKey(Post,on_delete=models.SET_NULL)
content = models.TextField()
timestamp = models.DateTimeField(auto_now_add=True)

def __str__(self):
    return str(self.user.username)

اﻻن اذا قمنا بالاطلاع علي نموذج التعليقات في لوحة التحكم ستجد كل المقالات مرتبطة مع وسيعمل بصورة طبيعية
ولكن اذا اردت استخدام التعليقات في مكان اخر كيف سيتم ذلك ؟
هنا يجب ان نستخدم ContentType اﻻن لنقم باعادة كتابة الموديول السابق
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType

class Comment(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
content_type = models.ForeignKey(ContentType,
on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey(‘content_type’, ‘object_id’)
content = models.TextField()
كما نلاحظ تم استبدال حقل Post الذي كان هو المفتاح اﻻجنبي في النموذج بهذه الثلاث حقول :
(content_type , object_id , content_object)

في الحقل اﻻول content_type قمنا بانشاء علاقة عامة مع كل النماذج الموجودة لدينا في المشروع
اما الحقل الثاني object_id نستطيع تحديد ال id الخاص بالكائن الذي نريد تحديدة من النماذج السابقة
اما في الحقل الثالث content_object نستطيع تحديد المحتوي الذي نريده ممن النماذج المرتبط بها النموذج الخاص بنا

لالسلام عليكم الي التطبيق الخاص بنا علي لوحة التحكم سيكون بالشكل التالي فقط لتضح لنا الصورة

كما نري النموذج متصل مع كل النماذج في المشروع اي بامكاننا استخدام التعليقات في اي نموذج نريد عوضا عن استخدامها في المقالات فقط هذا افضل اليس كذلك (;
اﻻن اضف بعض التعليقات الي مقال معين بعد ذلك لنعمل علي اظهار تلك التعليقات :
اولا قم باضافة اﻻسطر التاليه الي ملف views.py الخاص بك :
from django.contrib.contenttypes.models import ContentType
from .models import Comment,Post
اﻻن في داخل ال Post_detail view قم باضافة السطر التالي بافتراض ان لديك هذه الدالة في ملفك :
def post_detail(request, slug=None):
instance = get_object_or_404(Post, slug=slug)
content_type = ContentType.objecs.get_for_model(Post)
obj_id = instance.id
comments = Comment.objects.filter(content_type=content_type,object_id=obj_id)
اﻻن قم بتمرير ال comments الي ملف ال templates الخاص بك واستدعية بالصورة المعتادة {{comments}} سيظهر لك في شكل queryset لنقم بعمل for loop بالشكل التالي :
{%for comment in comments%}

{{comment.user}} | {{comment.content}}


{%endfor%}
وستظهر معك التعليقات الخاصه بهذا المقال
1 Like
#7

اتمنى لكم التوفيق و النجاح

1 Like