פייתון/פיתוח לסביבת אינטרנט/Django/מדריך ג'נגו חלק 2: יצירת אתר שלד

מאמר שני זה במדריך ה-Django שלנו מראה כיצד אתה יכול ליצור פרויקט אתר "שלד" כבסיס, שאותו תוכל לאחר מכן לאכלס בהגדרות, נתיבים, מודלים, תצוגות ותבניות ספציפיות לאתר.

דרישות קדם: הגדר סביבת פיתוח של Django . עיין במדריך של ג'נגו .
מַטָרָה: כדי להיות מסוגל להשתמש בכלים של Django כדי להתחיל פרויקטים חדשים משלך באתר.

סקירה כללית

מאמר זה מראה כיצד תוכל ליצור אתר "שלד", שאותו תוכל לאחר מכן לאכלס בהגדרות, נתיבים, מודלים, תצוגות ותבניות ספציפיות לאתר (אנו דנים בהם במאמרים מאוחרים יותר).

להתחיל:

  1. השתמש django-adminבכלי כדי ליצור תיקיית פרויקט, תבניות קבצים בסיסיות ו- manage.py , המשמש כסקריפט לניהול הפרויקט שלך.
  2. השתמש ב-manage.py כדי ליצור יישום אחד או יותר .

הערה: אתר אינטרנט עשוי להיות מורכב מחלק אחד או יותר. לדוגמה, אתר ראשי, בלוג, ויקי, אזור הורדות וכו'. Django מעודד אותך לפתח רכיבים אלה כיישומים נפרדים , אשר לאחר מכן ניתן לעשות בהם שימוש חוזר בפרויקטים שונים אם תרצה בכך.

  1. רשום את הבקשות החדשות כדי לכלול אותן בפרויקט.
  2. חבר את מיפוי כתובות האתר/נתיבים עבור כל יישום.

עבור אתר הספרייה המקומית , האתר ותיקיות הפרויקט נקראות locallibrary , וכוללות אפליקציה אחת בשם קטלוג . לכן מבנה התיקיות ברמה העליונה יהיה כדלקמן:

locallibrary/     # Website folder

manage.py     # Script to run Django tools for this project (created using django-admin)

locallibrary/ # Website/project folder (created using django-admin)

catalog/      # Application folder (created using manage.py)

העתק ללוח

הסעיפים הבאים דנים בשלבי התהליך בפירוט, ומראים כיצד תוכל לבדוק את השינויים שלך. בסוף מאמר זה, אנו דנים בתצורה אחרת של האתר שאתה עשוי לבצע גם בשלב זה.

יצירת הפרויקט

כדי ליצור את הפרויקט:

  1. פתחו מעטפת פקודה (או חלון מסוף), וודא שאתה נמצא בסביבה הוירטואלית שלך שלך .
  2. נווט למקום שבו ברצונך לאחסן את יישומי ה-Django שלך (עשה את זה קל למצוא במקום כמו בתוך תיקיית המסמכים שלך ), וצור תיקיה לאתר החדש שלך (במקרה זה: django_projects ). לאחר מכן עבור לספרייה החדשה שנוצרה:
3.  mkdir django_projects

4.  cd django_projects
  1. צור את הפרויקט החדש באמצעות django-admin startprojectהפקודה כפי שמוצגת, ולאחר מכן שנה לתיקיית הפרויקט:
6.  django-admin startproject locallibrary

7.  cd locallibrary

העתק ללוח

הכלי django-admin יוצר מבנה תיקיות/קבצים באופן הבא:

locallibrary/

manage.py

locallibrary/

    __init__.py

    settings.py

    urls.py

    wsgi.py

    asgi.py

העתק ללוח

ספריית העבודה הנוכחית שלנו צריכה להיראות בערך כך:

../django_projects/locallibrary/

העתק ללוח

תיקיית המשנה של פרויקט locallibrary היא נקודת הכניסה לאתר:

  • __init__.py הוא קובץ ריק המורה לפייתון להתייחס לספרייה זו כאל חבילת Python.
  • settings.py מכיל את כל הגדרות האתר, כולל רישום כל היישומים שאנו יוצרים, מיקום הקבצים הסטטיים שלנו, פרטי תצורת מסד הנתונים וכו'.
  • urls.py מגדיר את מיפויי האתר לצפייה של כתובת האתר. למרות שזה יכול להכיל את כל קוד המיפוי של כתובת האתר, מקובל יותר להאציל חלק מהמיפויים ליישומים מסוימים, כפי שתראה מאוחר יותר.
  • wsgi.py משמש כדי לעזור ליישום Django שלך לתקשר עם שרת האינטרנט. אתה יכול להתייחס לזה כאל לוחית.
  • asgi.py הוא תקן לאפליקציות ושרתים אסינכרוניים של Python לתקשר זה עם זה. ASGI הוא היורש האסינכרוני של WSGI ומספק תקן עבור אפליקציות Python אסינכרוניות וסינכרוניות כאחד (בעוד ש-WSGI סיפק תקן עבור אפליקציות סינכרוניות בלבד). זה תואם לאחור עם WSGI ותומך במספר שרתים ומסגרות יישומים.

הסקריפט manage.py משמש ליצירת יישומים, עבודה עם מסדי נתונים והפעלת שרת האינטרנט לפיתוח.

יצירת אפליקציית הקטלוג

לאחר מכן, הפעל את הפקודה הבאה כדי ליצור את אפליקציית הקטלוג שתחיה בתוך פרויקט הספרייה המקומית שלנו. הקפד להריץ פקודה זו מאותה תיקייה כמו ה- manage.py של הפרויקט שלך :

# Linux/macOS

python3 manage.py startapp catalog


# Windows

py manage.py startapp catalog

העתק ללוח

הערה: שאר המדריך משתמש בתחביר Linux/macOS. אם אתה עובד על Windows, בכל מקום שבו אתה רואה פקודה שמתחילה ב- python3עליך להשתמש במקום זאת py(או py -3).

הכלי יוצר תיקיה חדשה ומאכלס אותה בקבצים עבור החלקים השונים של האפליקציה (מוצג בדוגמה הבאה). רוב הקבצים נקראים על שם מטרתם (למשל תצוגות צריכות להיות מאוחסנות ב- views.py , מודלים ב- models.py , בדיקות ב- tests.py , תצורת אתר ניהול ב- admin.py , רישום אפליקציה ב- apps.py ) ומכילים כמה קוד boilerplate מינימלי לעבודה עם האובייקטים המשויכים.

ספריית הפרויקט המעודכנת אמורה להיראות כעת כך:

locallibrary/

manage.py

locallibrary/

catalog/

    admin.py

    apps.py

    models.py

    tests.py

    views.py

    __init__.py

    migrations/

העתק ללוח

בנוסף יש לנו כעת:

  • תיקיית העברות , המשמשת לאחסון "הגירות" - קבצים המאפשרים לך לעדכן אוטומטית את מסד הנתונים שלך בזמן שאתה משנה את המודלים שלך.
  • __init__.py - קובץ ריק שנוצר כאן כדי ש-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',

   # Add our new application

'catalog.apps.CatalogConfig', #This object was created for us in /catalog/apps.py

]

העתק ללוח

השורה החדשה מציינת את אובייקט תצורת היישום ( CatalogConfig) שנוצר עבורך ב- /locallibrary/catalog/ apps.py כאשר יצרת את היישום.

הערה: תבחין שיש כבר הרבה אחרים INSTALLED_APPS(ו MIDDLEWARE, בהמשך בקובץ ההגדרות). אלה מאפשרים תמיכה באתר הניהול של Django ובפונקציונליות שבה הוא משתמש (כולל הפעלות, אימות וכו').

ציון מסד הנתונים

זו גם הנקודה שבה בדרך כלל תציין את מסד הנתונים שישמש עבור הפרויקט. הגיוני להשתמש באותו מסד נתונים לפיתוח וייצור במידת האפשר, על מנת למנוע הבדלים מינוריים בהתנהגות. אתה יכול לברר על האפשרויות השונות במאגרי מידע (Django docs).

אנו נשתמש במסד הנתונים של SQLite עבור דוגמה זו, מכיוון שאנו לא מצפים לדרוש הרבה גישה במקביל במסד נתונים הדגמה, וזה לא דורש עבודה נוספת כדי להגדיר! אתה יכול לראות כיצד מסד נתונים זה מוגדר ב- settings.py :

DATABASES = {

'default': {

    'ENGINE': 'django.db.backends.sqlite3',

    'NAME': BASE_DIR / 'db.sqlite3',

   }

}

העתק ללוח

מכיוון שאנו משתמשים ב-SQLite, איננו צריכים לבצע הגדרה נוספת כאן. בוא נמשיך הלאה!

הגדרות פרויקט אחרות

הקובץ settings.py משמש גם לקביעת תצורה של מספר הגדרות אחרות, אבל בשלב זה, כנראה שברצונך לשנות את ה- TIME_ZONE - זה צריך להיות שווה למחרוזת מהרשימה הסטנדרטית של אזורי זמן של מסד נתונים tz (ה-TZ העמודה בטבלה מכילה את הערכים הרצויים). שנה את TIME_ZONEהערך שלך לאחת מהמחרוזות הבאות המתאימות לאזור הזמן שלך, לדוגמה:

TIME_ZONE = 'Europe/London'

העתק ללוח

ישנן שתי הגדרות נוספות שלא תשנה כעת, אך עליך להיות מודע אליהן:

  • SECRET_KEY. זהו מפתח סודי המשמש כחלק מאסטרטגיית אבטחת האתר של Django. אם אינך מגן על קוד זה בפיתוח, תצטרך להשתמש בקוד אחר (אולי לקרוא ממשתנה סביבה או קובץ) בעת הכנסתו לייצור.
  • DEBUG. זה מאפשר להציג יומני ניפוי באגים בשגיאה, במקום תגובות קוד מצב HTTP. יש להגדיר זאת ל- FalseProduction מכיוון שמידע על ניפוי באגים שימושי לתוקפים, אך לעת עתה אנו יכולים לשמור אותו כ- True.

מחבר את ממפה כתובת האתר

האתר נוצר עם קובץ ממפה URL ( urls.py ) בתיקיית הפרויקט. אמנם אתה יכול להשתמש בקובץ זה כדי לנהל את כל מיפויי כתובות האתרים שלך, אך נהוג יותר לדחות מיפויים ליישום המשויך.

פתחו את locallibrary/locallibrary/urls.py ושימו לב לטקסט ההוראה שמסביר כמה מהדרכים להשתמש במפה כתובת האתר.

"""locallibrary URL Configuration


The `urlpatterns` list routes URLs to views. For more information please see:

   https://docs.djangoproject.com/en/4.0/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

1. Add an import:  from other_app.views import Home

2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')

Including another URLconf

1. Import the include() function: from django.urls import include, path

2. 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),

]

העתק ללוח

מיפויי הכתובות מנוהלים באמצעות urlpatternsהמשתנה, שהוא רשימתpath() פונקציות של Python. כל path()פונקציה משייכת דפוס כתובת אתר לתצוגה מסוימת , שתוצג כאשר הדפוס תואם, או עם רשימה אחרת של קוד בדיקת דפוסי כתובת אתר (במקרה השני, הדפוס הופך ל"כתובת האתר הבסיסית" עבור דפוסים המוגדרים ב- מודול יעד). הרשימה urlpatternsמגדירה בתחילה פונקציה יחידה הממפה את כל כתובות האתרים עם מנהל התבנית/ למודולadmin.site.urls , המכיל את הגדרות מיפוי ה-URL של יישום ה-Admin.

הערה: המסלול פנימה path()הוא מחרוזת המגדירה דפוס כתובת אתר להתאמה. מחרוזת זו עשויה לכלול משתנה בעל שם (בסוגריים זווית), למשל 'catalog/<id>/'. דפוס זה יתאים לכתובת אתר כמו catalog/ any_chars / ויעביר את any_chars לתצוגה כמחרוזת עם שם פרמטר id. אנו דנים בשיטות נתיב ודפוסי מסלול בהמשך בנושאים מאוחרים יותר.

כדי להוסיף פריט רשימה חדש לרשימה urlpatterns, הוסף את השורות הבאות לתחתית הקובץ. פריט חדש זה כולל א path()שמעביר בקשות עם התבנית catalog/למודול catalog.urls(הקובץ עם כתובת האתר היחסית catalog/urls.py ).

# Use include() to add paths from the catalog application

from django.urls import include


urlpatterns += [

path('catalog/', include('catalog.urls')),

]

העתק ללוח

הערה: שימו לב שכללנו את שורת הייבוא ​​( from django.urls import include) עם הקוד שמשתמש בה (כך שקל לראות מה הוספנו), אבל מקובל לכלול את כל שורות הייבוא ​​שלכם בראש קובץ Python.

כעת הבה ננתב מחדש את כתובת האתר הבסיסית של האתר שלנו (כלומר 127.0.0.1:8000) לכתובת האתר 127.0.0.1:8000/catalog/. זו האפליקציה היחידה שבה נשתמש בפרויקט הזה. לשם כך, נשתמש בפונקציית תצוגה מיוחדת, RedirectView, שלוקחת את כתובת ה-URL היחסית החדשה כדי להפנות אל ( /catalog/) כארגומנט הראשון שלה כאשר תבנית ה-URL שצוינה path()בפונקציה מתאימה (כתובת ה-Root, במקרה זה).

הוסף את השורות הבאות לתחתית הקובץ:

#Add URL maps to redirect the base URL to our application

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, JavaScript ותמונות כברירת מחדל, אבל זה יכול להיות שימושי עבור שרת האינטרנט של הפיתוח לעשות זאת בזמן שאתה יוצר את האתר שלך. כתוספת אחרונה לממפ כתובות אתרים זה, תוכל לאפשר הגשה של קבצים סטטיים במהלך הפיתוח על ידי הוספת השורות הבאות.

הוסף את הבלוק הסופי הבא לתחתית הקובץ כעת:

# 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)

העתק ללוח

הערה: ישנן מספר דרכים להרחיב את urlpatternsהרשימה (בעבר, פשוט צירפנו פריט רשימה חדש באמצעות +=האופרטור כדי להפריד בבירור בין הקוד הישן לחדש). יכולנו במקום זאת פשוט לכלול את מפת הדפוס החדשה הזו בהגדרת הרשימה המקורית:

urlpatterns = [

path('admin/', admin.site.urls),

path('catalog/', include('catalog.urls')),

path('', RedirectView.as_view(url='catalog/')),

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

העתק ללוח

כשלב אחרון, צור קובץ בתוך תיקיית הקטלוג שלך בשם urls.py והוסף את הטקסט הבא כדי להגדיר את המיובאת (ריק) urlpatterns. זה המקום שבו נוסיף את הדפוסים שלנו תוך כדי בניית האפליקציה.

from django.urls import path

from . import views


urlpatterns = [


]

העתק ללוח

בדיקת מסגרת האתר

בשלב זה יש לנו פרויקט שלד שלם. האתר למעשה עדיין לא עושה כלום, אבל כדאי להפעיל אותו כדי לוודא שאף אחד מהשינויים שלנו לא שבר שום דבר.

לפני שנעשה זאת, עלינו להפעיל תחילה העברת מסד נתונים . זה מעדכן את מסד הנתונים שלנו (כדי לכלול דגמים כלשהם ביישומים המותקנים שלנו) ומסיר כמה אזהרות בנייה.

הפעלת העברת מסדי נתונים

Django משתמש ב-Object-Relational-Mapper (ORM) כדי למפות את הגדרות המודל בקוד ה-Django למבנה הנתונים המשמש את מסד הנתונים הבסיסי. כאשר אנו משנים את הגדרות המודל שלנו, Django עוקב אחר השינויים ויכול ליצור סקריפטים להעברת מסד נתונים (ב /locallibrary/catalog/migrations/ ) כדי להעביר אוטומטית את מבנה הנתונים הבסיסי במסד הנתונים כך שיתאים למודל.

כאשר יצרנו את האתר, ג'נגו הוסיפה אוטומטית מספר דגמים לשימוש מדור הניהול של האתר (עליהם נסתכל בהמשך). הפעל את הפקודות הבאות כדי להגדיר טבלאות עבור אותם מודלים במסד הנתונים (ודא שאתה נמצא בספרייה המכילה manage.py ):

python3 manage.py makemigrations

python3 manage.py migrate

העתק ללוח

אזהרה: תצטרך להפעיל את הפקודות הללו בכל פעם שהמודלים שלך משתנים באופן שישפיע על מבנה הנתונים שיש לאחסן (כולל הוספה והסרה של מודלים שלמים ושדות בודדים).

הפקודה makemigrationsיוצרת ( אך לא חלה) את ההעברות עבור כל היישומים המותקנים בפרויקט שלך. אתה יכול לציין את שם היישום גם כדי להפעיל הגירה עבור פרויקט בודד. זה נותן לך הזדמנות לבדוק את הקוד עבור ההגירות האלה לפני שהן מיושמות. אם אתה מומחה לג'נגו, אתה יכול לבחור לצבוט אותם מעט!

הפקודה migrateהיא מה שמחיל את ההגירות על מסד הנתונים שלך. Django עוקב אחר אילו מהם נוספו למסד הנתונים הנוכחי.

הערה: ראה העברות (Django docs) למידע נוסף על פקודות ההעברה בשימוש פחות .

הפעלת האתר

במהלך הפיתוח, תוכל לשרת את האתר תחילה באמצעות שרת האינטרנט של הפיתוח ולאחר מכן להציג אותו בדפדפן האינטרנט המקומי שלך.

הערה: שרת האינטרנט של הפיתוח אינו חזק או בעל ביצועים מספיק לשימוש בייצור, אך זוהי דרך קלה מאוד להפעיל את אתר ה-Django שלך במהלך הפיתוח כדי לתת לו בדיקה מהירה נוחה. כברירת מחדל זה ישרת את האתר למחשב המקומי שלך ( http://127.0.0.1:8000/), אבל אתה יכול גם לציין מחשבים אחרים ברשת שלך לשרת. למידע נוסף ראה django-admin ו-manage.py: runserver (Django docs).

הפעל את שרת האינטרנט לפיתוח על ידי קריאה runserverלפקודה (באותה ספרייה כמו manage.py ):

$ python3 manage.py runserver


Watching for file changes with StatReloader

Performing system checks...


System check identified no issues (0 silenced).

March 01, 2022 - 04:08:45

Django version 4.0.2, using settings 'locallibrary.settings'

Starting development server at http://127.0.0.1:8000/

Quit the server with CONTROL-C.

העתק ללוח

ברגע שהשרת פועל, אתה יכול להציג את האתר על ידי ניווט http://127.0.0.1:8000/בדפדפן האינטרנט המקומי שלך. אתה אמור לראות דף שגיאת אתר שנראה כך: