8 מסגרות אינטרנט נהדרות של פייתון

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

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

בקבוק

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

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

למערכת הניתוב ב- Bottle, הממפה כתובות אתרים לפונקציות, יש תחביר כמעט זהה לזה של Flask. אתה גם לא מוגבל למערך נתיבים קשיח; אתה יכול ליצור אותם באופן דינמי. ניתן לגשת ולנתח נתוני בקשה ותגובה, קובצי Cookie, משתני שאילתה, נתוני טופס מפעולת POST, כותרות HTTP והעלאת קבצים באמצעות אובייקטים ב- Bottle.

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

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

בקבוק תומך אפילו בקצות אחורי שרת מרובים. הוא מגיע עם מיני-סרבר מובנה משלו לבדיקה מהירה, אך יתמוך גם ב- WSGI כללי, במגוון רחב של שרתי HTTP תואמי WSGI וב- CGI ישן רגיל במידת הצורך.

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

כמו ב- Flask, תוכלו להרחיב את הפונקציונליות של Bottle באופן ידני או באמצעות תוספים. תוספות בקבוקים אינן קרובות כמעט כמו זו של Flask, אך ישנן חלקים שימושיים, כגון שילוב עם שכבות מסדי נתונים שונות ואימות משתמש בסיסי. לתמיכה ב- async, Bottle יכול להשתמש באחד ממתאמי השרת הקיימים הפועל בצורה אסינכרונית, כגון aiohttp / uvloop, אך async/awaitאינו נתמך באופן מקורי.

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

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

CherryPy

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

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

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

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

CherryPy לעתים קרובות יפנה לספריה קיימת של צד שלישי כדי לתמוך בתכונה במקום לספק אותה באופן מקורי. יישומי WebSocket, למשל, אינם נתמכים על ידי CherryPy ישירות, אלא דרך ספריית ws4py.

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

בַּז

אם אתה בונה ממשקי API מבוססי REST ושום דבר אחר, פלקון נוצרה בדיוק בשבילך. רזה ומהיר, כמעט ללא תלות מעבר לספרייה הסטנדרטית, פלקון מספקת את כל מה שאתה צריך עבור ממשקי API של REST ותו לא. פלקון 2.0, שוחרר בשנת 2019, מבטל את תמיכת Python 2.x ומחייב לפחות Python 3.5.

חלק גדול מהסיבה שבזכותה פלקון זוכה בתווית "קליל ודק" לא קשור למספר שורות הקוד במסגרת. הסיבה לכך היא כי פלקון כמעט ולא מטיל על יישומים מבנה משלו. כל מה שיישום Falcon צריך לעשות הוא לציין אילו פונקציות ממפות לאילו נקודות קצה של API. החזרת JSON מנקודת קצה כוללת מעט יותר מאשר הגדרת מסלול והחזרת הנתונים באמצעות json.dumpsהפונקציה מהספרייה הסטנדרטית של Python. התמיכה ב- async עדיין לא נחתה בפלקון, אך העבודה מתבצעת בכדי לגרום לזה לקרות בפלקון 3.0.

פלקון גם משתמש בברירות מחדל שפויות מחוץ לקופסה, ולכן יש צורך בהתעסקות מעטה. לדוגמה, 404s מוגדרים כברירת מחדל עבור כל מסלול שאינו מוצהר במפורש. אם ברצונך להחזיר שגיאות ללקוח, תוכל להעלות אחת ממספר חריגות המניות הכלולות במסגרת (כגון HTTPBadRequest) או להשתמש falcon.HTTPErrorבחריג כללי . אם אתה זקוק לעיבוד מקדים או לאחר עיבוד למסלול, פלקון מספקת ווים גם עבור אלה.

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

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

FastAPI

שמו של FastAPI הוא סיכום טוב של מה שהוא עושה. הוא נבנה כדי ליצור נקודות קצה של API במהירות, והוא פועל גם מהר.

FastAPI עושה שימוש בפרויקט Starlette עבור ליבת הרשת המהירה שלו, אך אינך צריך לדעת על הפנימיות של Starlette כדי להשתמש ב- FastAPI. אתה מגדיר נקודות קצה באותה צורה כמו אפליקציית Flask או Bottle - השתמש במעצבים כדי לציין אילו פונקציות מטפלות באילו מסלולים - ואז להחזיר מילונים המתורגמים אוטומטית ל- JSON.

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

FastAPI עושה שימוש ברמזים מסוג Python כדי לספק אילוצים לסוגי הנתונים שהמסלולים מקבלים. למשל, אם יש לך מסלול עם הסוג Optional[int], FastAPI תדחה כל הגשה למעט מספרים שלמים. אינך צריך להוסיף קוד אימות נתונים לנקודות הקצה שלך; אתה יכול פשוט להשתמש ברמזים מסוג ולתת ל- FastAPI לעשות את העבודה.

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

בקבוק

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

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

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

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

Flask הגיע לשחרור ציון הדרך 1.0 שלה בשנת 2018, כש- Python 2.6 ו- Python 3.3 היו הגרסאות המינימליות הנתמכות, ועם רבות מהתנהגויותיה נקבעו אבן. Flask אינו תומך במפורש בתחביר האסינכרון של Python, אך וריאציה תואמת API של Flask בשם Quart הופרעה על מנת לספק דרישה זו.

פִּירָמִידָה

פירמידה קטנה וקלילה, מתאימה היטב למשימות כמו חשיפת קוד Python קיים כ- REST API, או מתן הליבה לפרויקט אינטרנט בו היזם מבצע את מרבית הרמת הכבדות.

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

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

נדרשת מעט מאוד עבודה לבניית יישום פירמידה בסיסי. כמו בקבוק ובקבוק, יישום פירמידה יכול להיות מורכב מקובץ פיתון יחיד, מלבד הקבצים למסגרת עצמה. ממשק API פשוט של דרך אחת דורש לא יותר מתריסר שורות קוד. רוב זה הוא boilerplate כמו from … importהצהרות והגדרת שרת WSGI.

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

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