שפר את היעילות והמדרגיות של אפליקציית Django שלך על ידי הטמעת עימוד. הנה כל מה שאתה צריך לדעת כדי להתחיל.
עימוד משפר את חווית המשתמש ואת ביצועי האפליקציה בעת התמודדות עם מערכי נתונים גדולים. ללא מערכת עימוד, האפליקציה שלך תחווה פיגור רוב הזמן. עם Django, אתה יכול למנף את התמיכה המובנית לעימוד לעימוד יישום האינטרנט שלך.
איך עובד עימוד ב-Django
הטמעת עימוד ב-Django עשויה להיות שונה בהתאם אם אתה עובד עם תצוגות מבוססות כיתה או מבוססות פונקציות. ללא קשר לשיטה המועדפת עליך, העקרונות הבסיסיים נשארים זהים.
ג'נגו משתמש בכיתה שנקראת עימוד ליישם עימוד. ה עימוד class מספקת מספר שיטות שבהן תוכל להשתמש כדי להתאים אישית את העימוד שלך. בעת אתחול ה עימוד מחלקה, היא דורשת שני פרמטרים חובה; הנתונים לדף, ומספר הפריטים שיוצגו בכל עמוד. ה עימוד לוקח פרמטר אופציונלי שלישי עבור יתומים כדי לציין את המספר המינימלי של פריטים שצריך להישאר בעמוד האחרון. כברירת מחדל, הערך של יתומים הוא 0 כלומר לכל הדפים יש אותו מספר פריטים.
כתובת האתר של דף מעוצב ב-Django דומה לזה: https://example.com/products/?page=3. ה עמוד פרמטר ב-URL אומר ל-Django איזה עמוד המשתמש רוצה לראות. זה גם עוזר ל-Django לקבוע איזה חלק מהנתונים להציג עבור אותו עמוד.
הקוד המשמש בפרויקט זה זמין ב-a מאגר GitHub והוא בחינם עבורך לשימוש תחת רישיון MIT.
הגדר את פרויקט ה-Django שלך עבור עימוד
לפני שתבצע עימוד ב-Django, אתה חייב לעשות זאת התקנת את Django והגדר אותו במחשב שלך. לאחר הגדרת Django במחשב שלך, עליך ליצור אפליקציה ומודל עבור הנתונים שלך. להלן דגם פשוט שתוכל להעתיק:
מ django.db יְבוּא דגמים
מעמדהודעה(דגמים. דֶגֶם):
כותרת = דגמים. CharField (max_length=255)
מחבר = דגמים. CharField (max_length=50)
תוכן = דגמים. שדה טקסט('תוכן דואר')
def__str__(עצמי):
לַחֲזוֹר כותרת עצמית
המודל שלמעלה מיועד ליישום בלוג. הוא מגדיר את שדות הכותרת, המחבר והתוכן עבור כל פוסט בבלוג. יש לו גם שיטה שמחזירה את כותרת הפוסט לחוויית משתמש טובה יותר בפאנל הניהול.
העבר את המודל שלך על ידי הפעלת הפקודה הזו:
python manage.py העברת python manage.py && python manage.py
לאחר העברת הדגם שלך, עליך לנווט אל blog>admin.py כדי לרשום אותו. הקוד הבא רושם בהצלחה מודל שנקרא הודעה.
מ django.contrib יְבוּא מנהל
מ .מודלים יְבוּא הודעה # החלף את 'פוסט' בשם הדגם שלך
admin.site.register (פוסט)
לאחר מכן, צור משתמש-על והוסף פוסטים בפאנל הניהול שלך ב-Django. כדי ליצור משתמש-על, השתמש בפקודה זו:
python manage.py createsuperuser
הפקודה לעיל תעביר אותך בתהליך המודגם בתמונה למטה:
לאחר יצירת משתמש-על, הפעל את שרת הפיתוח שלך ונווט לפאנל הניהול.
שרת python manage.py
ברגע שהשרת שלך מתחיל, נווט אל http://127.0.0.1:8000/admin, היכנסו והוסיפו כמה פוסטים.
לאחר מכן, צור תבנית HTML כדי להציג את הפוסטים שלך בדפדפן. צור את הקובץ שלך בספרייה הבאה: your_app/templates/your_app_name/index.html. אם אינך מבין כיצד ליצור תבניות, קרא את שלנו מדריך מבוא לארכיטקטורת ה-MVT של ג'נגו.
עידוד ג'נגו בתצוגה מבוססת פונקציות
Django מאפשר לך לבנות יישומים עם תצוגות מבוססות כיתה או תצוגות מבוססות פונקציות. כדי לדמיין את היישום שלך באמצעות תצוגה מבוססת פונקציות. בצע את השלבים הבאים:
- פתח את views.py קובץ וייבא את עימוד מעמד.
מ django.core.paginator יְבוּא עימוד
- צור פונקציית תצוגה לעיבוד פוסטים בתבנית ה-HTML שלך.
מ django.shortcuts יְבוּא לְדַקלֵם
מ .מודלים יְבוּא הודעה
מ django.core.paginator יְבוּא עימוד
defתצוגת רשימה(בַּקָשָׁה):
posts = Post.objects.all()
לַחֲזוֹר render (בקשה, 'blog/blog_list_view.html', {'פוסטים':פוסטים})
- צור דפוס כתובת אתר כדי להציג את הפוסטים שלך בדפדפן. התחל על ידי הגדרת תבנית כתובת האתר בספריית הפרויקט שלך. פתח את ה urls.py קובץ ברמת הפרויקט והוסף את זה ל- תבניות url:
מ django.urls יְבוּא לִכלוֹל
urlpatterns = [
...,
נָתִיב('', כולל('blog.urls')),
]
בקטע הקוד שלמעלה, החלף בלוג עם שם האפליקציה שלך. אם אינך יכול להבדיל בין פרויקט לאפליקציה, עליך לדעת כיצד פרויקט שונה מאפליקציה ב-Django.
לאחר ביצוע התצורה שלמעלה, צור א urls.py קובץ בספריית האפליקציה שלך (במקרה זה, זה בלוג תיקייה) והוסיפו את קטע הקוד הזה:
מ django.urls יְבוּא נָתִיב
מ .צפיות יְבוּא תצוגת רשימה
urlpatterns = [
נָתִיב('', list_view, name='תצוגת רשימה'),
]
כאשר אתה מפעיל את השרת שלך ונווט אל http://127.0.0.1:8000/, הדפדפן יציג את הפוסטים שלך לפי גיליון הסגנונות שציינת.
- שנה את פונקציית התצוגה שלך כדי להוסיף לוגיקת עימוד. הנה דוגמה:
defתצוגת רשימה(בַּקָשָׁה):
posts = Post.objects.all()
עימוד = עימוד (פוסטים, 3)
page_number = בקשה. GET.get('עמוד') #קבל את מספר העמוד המבוקש מכתובת האתר
page = pageted.get_page (page_number)
לַחֲזוֹר render (בקשה, 'blog/blog_list_view.html', {'עמוד':עמוד})
קטע הקוד לעיל מציג שלושה משתנים חדשים: מְעוּמָד, מספר עמוד, ו עמוד. כל משתנה עושה את הפעולות הבאות:
- ה מְעוּמָד משתנה אתחול את עימוד מעמד. בתרחיש זה, הנתונים שיש לעימוד הם ערכת השאילתה, פוסטים, וזה לוקח 3 כמספר הפריטים שיוצגו בכל עמוד.
- ה מספר עמוד המשתנה מקבל את מספר העמוד מכתובת האתר. לדוגמה, ב http://127.0.0.1:8000/?page=2, מספר העמוד הוא 2.
- ה עמוד משתנה מאחזר את הדף הספציפי לעיבוד מתוך מְעוּמָד מִשְׁתַנֶה.
עד עכשיו, ג'נגו בטח עיבד את הדף שלך. אתה יכול לנווט לדפים מעומדים ספציפיים באמצעות פורמט כתובת האתר המוצג בתמונה זו:
- שנה את תבנית ה-HTML שלך כדי להציג ניווט עבור דפים מעומדים. שימוש בשיטות הזמינות ב- עימוד הכיתה מאפשרת לך ליצור ניווט פשוט בדף שלך. הנה דוגמה שתוכל להוסיף מתחת לקוד ה-HTML הראשוני שלך:
{% if page.has_previous %}
<אhref="?page={{page.previous_page_number}}"
class="btn btn-secondary mx-NN">הקודםא>
{% endif %}<אhref="?page=1"מעמד="btn btn-secondary">ראשוןא>
{% עבור num ב-page.paginator.page_range %}
{% if num == page.number %}
<לְהַקִיף>{{ מספר }}לְהַקִיף>
{% אחר %}
<אhref="?page={{num}}"מעמד="btn btn-secondary mx-2">
{{ מספר }}
א>
{% endif %}
{% endfor %}<אhref="?page={{page.paginator.num_pages}}"מעמד="btn btn-secondary mx-2">
אחרון
א>
{% if page.has_next %}
<אhref="?page={{page.next_page_number}}"מעמד="btn btn-secondary mx-2">
הַבָּא
א>
{% endif %}
בקטע הקוד שלמעלה, נעשה שימוש בשיטות הבאות יחד עם הצהרות מותנות כדי לקבוע כיצד ייראה הניווט בעימוד:
- has_previous: שיטה זו מחזירה נָכוֹן אם יש עמוד קודם בנתונים המעומדים.
- previous_page_number: שיטה זו מחזירה את הערך של העמוד הקודם.
- page_range: שיטה זו מאפשרת לך לדעת כמה דפים יש לך בנתוני העימוד שלך.
- מספר: שיטה זו מחזירה את הערך של הדף הנוכחי.
- num_pages: שיטה זו מחזירה את מספר הדפים הכולל.
- has_next: פונקציה זו מחזירה נָכוֹן אם יש עמוד הבא בנתונים המעומדים.
- next_page_number: שיטה זו מחזירה את הערך של העמוד הבא.
עימוד ג'נגו בתצוגה מבוססת כיתה
בתצוגה מבוססת כיתה, אינך צריך לייבא ולאתחל את עימוד מעמד. כדי ליישם עימוד בתצוגה מבוססת כיתה, עליך לציין תכונה בשם pagete_by. בצע את השלבים הבאים כדי לדמיין את האפליקציה שלך עם תצוגה מבוססת כיתה:
- כתוב תצוגה מבוססת כיתה וציין את pagete_by תְכוּנָה. הנה דוגמה פשוטה:
מ .מודלים יְבוּא הודעה
מ django.views.generic יְבוּא תצוגת רשימה
מעמדPostListView(תצוגת רשימה):
דגם = פוסט
template_name = 'blog/blog_list_view.html'
context_object_name = 'עמוד'
pagete_by = 2
התצוגה שלמעלה היא הגרסה מבוססת המחלקה של התצוגה מבוססת הפונקציות שנכתבה קודם לכן. השקפה זו יורשת את זו של ג'נגו תצוגת רשימה מחלקה, המשמשת לרישום פריטים. הוא מגדיר את ההיגיון שלו עם תכונות כגון דֶגֶם, שם התבנית, context_object_name, ו pagete_by. ה pagete_by תכונה קובעת כמה פוסטים להציג בכל עמוד; במקרה זה, 2 פוסטים.
- לאחר שתיצור את התצוגה שלך, שנה את urls.py קובץ כדי להשתמש בו. הנה דוגמה פשוטה:
מ .צפיות יְבוּא PostListView
urlpatterns = [
נָתִיב('', PostListView.as_view(), name='תצוגת רשימה'),
]
- שנה את תבנית ה-HTML שלך לשימוש page_obj עבור העימוד.
{% if page_obj.has_previous %}
<אhref="?page={{page_obj.previous_page_number}}"
class="btn btn-secondary mx-NN">הקודםא>
{% endif %}<אhref="?page=1"מעמד="btn btn-secondary">ראשוןא>
{% עבור num ב-page_obj.paginator.page_range %}
{% if num == page_obj.number %}
<לְהַקִיףמעמד="העמוד הנוכחי">{{ מספר }}לְהַקִיף>
{% אחר %}
<אhref="?page={{num}}"מעמד="btn btn-secondary mx-2">
{{ מספר }}
א>
{% endif %}
{% endfor %}<אhref="?page={{page_obj.paginator.num_pages}}"
class="btn btn-secondary mx-NN">
אחרון
א>
{% if page.has_next %}
<אhref="?page={{page_obj.next_page_number}}"
class="btn btn-secondary mx-NN">
הַבָּא
א>
{% endif %}
בניגוד לתבנית HTML עבור התצוגה מבוססת הפונקציות, תבנית זו משתמשת page_obj במקום עמוד כדי לייצג את אובייקט העמוד. זוהי התנהגות ברירת המחדל עבור עימוד מבוסס-כיתה ב-Django.
השתמש בעידון כדי להפוך את האפליקציה שלך לניתנת להרחבה
עימוד מפחית את העומס על השרת/מסד הנתונים שלך על ידי שליפת והצגת תת-קבוצות קטנות יותר של נתונים בכל פעם. עם עימוד, הביצועים של האתרים שלך יעלו. למשתמשים שלך תהיה גם חוויה טובה בעת השימוש באפליקציה שלך.
תצוגות מבוססות כיתה חוסכות יותר זמן וקוד בהשוואה לתצוגות מבוססות פונקציות, אבל אתה יכול להשתמש באחת מהן בהתאם להעדפות שלך ולמפרטי הפרויקט.