5 מסגרות רשת גדולות וחזקות של פייתון

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

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

CubicWeb

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

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

בבסיסה, CubicWeb מספקת פיגומים בסיסיים המשמשים כל אפליקציית רשת: "מאגר" לחיבורי נתונים ואחסון; "מנוע רשת" לבקשות / תגובה בסיסיות של HTTP ו- CRUD; וסכימה למידול נתונים. כל זה מתואר בהגדרות מחלקה של פיתון.

כדי להגדיר ולנהל מקרים של CubicWeb, אתה עובד עם כלי שורת פקודה הדומה לזה ששימש לג'נגו. מערכת תבניות מובנית מאפשרת לך לייצר פלט HTML בתכנות. אתה יכול גם להשתמש בקוביה המספקת כלים לממשקי משתמש באינטרנט, כגון זו עבור מסגרת ה- HTML של Bootstrap.

למרות ש- CubicWeb תומך ב- Python 3 (מאז גרסה 3.23), נראה שהוא לא משתמש בפונקציונליות האסינכרון המקורית של Python 3. דרך מעגלית לכלול async תהיה שימוש במודול cubicweb.pyramid כדי להשתמש במסגרת הפירמידה כשרת האינטרנט, ולצייר על מזלג של פירמידה המשתמשת בבניית אסינכרון. אפשר גם לבצע משימות בצורה אסינכרונית עם קוביית העובד מעובד. אבל כל דבר יותר פשוט נראה מחוץ להישג יד לעת עתה.

כדי להשיג או לתפעל נתונים מתמשכים באפליקציית CubicWeb, אתה משתמש בשפת שאילתת Relation (RQL), שמפעילה תחביר דמוי SQL בצורה מעורפלת, אך מעוצבת על פי SparQL של ​​ה- W3C. ההצדקה של CubicWeb לכך היא, שוב, הפשטה: RQL מספק מסלול מקושר מאוד לקשר בין מקורות נתונים שונים.

מכיוון של- CubicWeb יש הרבה תלות, עדיף להשתמש pip installבכדי להביא את כולם. יתכן שתצטרך לבצע כמות מסוימת של התאמות ידניות בסביבה המקומית. זאת בניגוד למסגרות אחרות בהן pip installכל מה שנדרש להריץ או להפיל את קוד המסגרת לתיקיית משנה של פרויקט אחר. לחלופין, תוכל להשתמש במיכל Docker כדי להפעיל את הדברים.

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

CubicWeb נותרה תחת פיתוח פעיל, אם איטי. התוכניות עבור CubicWeb 4.0 בוטלו מאז 2012, אך טרם הוצע ציר זמן למסירתו.

ג'נגו

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

ג'נגו בילה שנים רבות בישיבה בגרסה 1.x. כשג'נגו 2.0 הגיע בסוף 2017, הוא הפיל את התאימות עם Python 2 לטובת Python 3.4 ומעלה. Django 3.0, שיצא בדצמבר 2019, דורש Python 3.6 ומעלה, ומוסיף תמיכה בתקן ASGI האסינכרוני החדש ליישומי אינטרנט של Python.

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

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

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

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

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

לג'נגו יש גם מוזרויות. למשל, תבניות עמוד אינן יכולות להשתמש בניתנות להתקשרות. דוגמה: ניתן להעביר {{user.name}}כרכיב בתבנית, אך לא {{user.get_name()}}. זו אחת הדרכים שג'נגו מבטיח כי תבניות לא יורים בך בטעות ברגל, אך אילוצים אלה עלולים להיות צורמים אם אינך מוכן לכך. אמנם יש דרכים לעקיפת הבעיה, אך הם נוטים לגבות מחיר מהביצועים.

החל מגרסה 3.0, ג'נגו הוסיף תמיכה בתצוגות אסינכרוניות. למרבה הצער, עדיין אין תמיכה ב- async בחלקים אחרים של מחסנית Django, כמו ה- ORM. אבל אתה יכול לפרוס את ג'נגו באמצעות ASGI כדי לנצל באופן מלא את תצוגות הסינכרון.

Web2py

בעולם התכנות של רובי, Ruby on Rails היא מסגרת האינטרנט בפועל. פרופסור למדעי המחשב מאוניברסיטת DePaul, Massimo Di Pierro, קיבל השראה מ- Rails ליצור מסגרת אינטרנטית בפייתון שהייתה קלה להגדרה ושימוש באופן דומה. התוצאה היא Web2py.

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

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

ממשק האינטרנט של Web2py נבנה עם Bootstrap 4, כך שהוא קל לעיניים וקל לניווט. עורך הדפדפן אינו מהווה תחליף ל- IDE מלא, אך הוא מצויד בעזרים מועילים כמו מספור קו והדגשת תחביר של פייתון (כולל הזחה אוטומטית). כלול גם ממשק אינטרנט מהיר למעטפת Python, כך שתוכלו לתקשר עם Web2py משורת הפקודה - ויתור נחמד למומחים.

מערכת הפקת הנתונים המשמשת ב- Web2py עובדת קצת אחרת מ- ORM של ג'נגו ומ- ORM אחרים בהשראתה (כמו למשל פיווי). מערכות אלה משתמשות בשיעורי Python כדי להגדיר מודלים, ואילו Web2py משתמש בפונקציות קונסטרוקטוריות כמו define_tableלייצר מודלים. ההבדלים עשויים להיות צורמים רק אם רגילים בדרך אחרת; הם לא צריכים להרפות חדשים. לא סביר להניח שתיתקל בבעיה להעביר את Web2py לספק נתונים, מכיוון שהוא מדבר כמעט עם כל מסד נתונים גדול שקיים.

פונקציה שימושית באמת הקשורה למסד נתונים ב- Web2py היא היכולת ליצור תרשים של המודלים, המאפשרת לך לדמיין כיצד המודלים שלך קשורים זה לזה. יהיה עליך להתקין את ספריית PyGraphviz כדי לאפשר את התכונה הזו.

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

אין פלא שהתיעוד של Web2py מכונה "הספר". ראשית, הוא מכסה כמות מדהימה של חומר ב- Web2py, Python ובסביבות הפריסה המשמשות לשניהם. שנית, הוא כתוב בסגנון סיפורי נגיש ביותר. שלישית, הוא מדבר לעומק על תרחישים נפוצים של בניית יישומים. יש פרק שלם, למשל, על השימוש ב- jQuery לבניית יישומי AJAX.

וופי

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

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

Weppy מנוגד למסגרות הקטנות יותר בכך שהוא כולל כמה תכונות שהם משלבים רק כתוספים או כתוספים. למשל, לא לפלסק ולא לבקבוק יש ORM מובנה או מערכת ניהול נתונים. Weppy כולל ORM, אם כי מבוסס על פרויקט pyDAL ולא על SQLAlchemy הרבה יותר פופולרי. Weppy אפילו תומך בהעברות סכמות, שג'אנגו תומך בה כחלק ממערכת ה- ORM שלה (מערכת ההגירה של ג'נגו גם הרבה יותר אוטומטית). בעוד שלוופי יש מנגנון הרחבה, רשימת התוספות שאושרה רשמית היא זעירה, קטנה בהרבה מקטלוג ההרחבות של Flask.

מסגרות בעלות משקל קל יותר כמו Weppy משמשות לעיתים קרובות לבניית ממשקי API RESTful, ו- Weppy מצוידת בפונקציות נוחות למטרה זו. שים @serviceמעצב על מסלול, והנתונים שאתה מחזיר מעוצבים אוטומטית לבחירתך JSON או XML.

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

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

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

תוכניות ארוכות טווח עבור Weppy כוללות תמיכה באסינכרון ושקעים כישויות ממדרגה ראשונה נמוכה. המפתחים של Weppy מתכננים להציג את התכונות הללו בגרסה 2.0, ואז לדרוש את Python 3.7 ומעלה לכל הגרסאות העתידיות של Weppy.

זופ