1 of 12

הגדרות אפליקציה בApp Engine

הגדרות של app.yaml וקצת temaplates

2 of 12

מה זה app.yaml

  • זהו קובץ הגדרות לאפליקציית App Engine הכתוב בשפת yaml (פורמט פשוט, בלי חרדות)
  • בתוך הקובץ אנו מגדירים (בין היתר):
    • את מזהה האפליקציה - ע"מ שנוכל לשייך את האפליקציה המקומית לפרוייקט אונליין.
    • גירסת האפליקציה - ניתן להגיש כמה גירסאות בו זמנית.
    • הפניות בין כתובות לקוד - או בשמם העברי handlers. זה החלק החשוב, פה מגדירים איזה קוד יטפל באיזו כתובת.
    • ספריות צד שלישי מיוחדות שנרצה לכלול בפרוייקט.

תיעוד של app.yaml

3 of 12

פרוייקט לדוגמא

https://github.com/jce-il/GAE-word-fun

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

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

הורידו את הפרוייקט למכונה שלכם ונסו להריץ לפני שאנחנו נכנסים לקוד.

4 of 12

מבנה התיקיות

זהו מבנה תיקיות מומלץ בלבד. אני בונה את התיקיות שלי ככה, אתם לא מחויבים לזה.

  • תיקיית API - כל הנקודות שהמשתמש לא פונה אליהן ישירות. מחשב-למחשב
  • תיקיית WEB -
    • עמודים
    • קבצים סטטיים (CSS, JS, תמונות)
  • תיקיית LIB - ספריות צד שלישי
  • תיקיית MODELS - הגדרות המודלים למסד הנתונים (נדבר על זה שבוע הבא)

5 of 12

מה צריך בשביל להגיש עמוד

אז מה בעצם אנחנו צריכים בשביל שעמוד יוצג למשתמש?

  1. הגדרת ביטוי רגולרי אשר "תופס" איזושהי כתובת
  2. הגדרת הקוד שמטפל בכתובת שנתפסה
  3. כתיבת המודול (הקוד) שמטפל בכתובת הזו, עם התייחסות לכתובת/ות

ניקח לדוגמא את העמוד http://word-fun.appspot.com/game

בואו נעבור על כל הנקודות בקוד עד שהעמוד יוצג למשתמש

6 of 12

שוב app.yaml

בואו נסתכל בapp.yaml - החלק הכי מעניין זה handlers

כאן אנחנו בעצם נקבע מה יוגש באיזו כתובת של האפליקציה שלנו.

בואו נעבור על ההנדלרים השונים.

7 of 12

יש לנו שורה:

-url: /game

היא תופסת את הכתובת ourapp.appspot.com/game

ואחרי זה השורה:

script: web.pages.game.app

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

web/pages

וששמו game.py

משמע:

web/pages/game.py

8 of 12

וכמובן שצריכים להתייחס גם לנקודות החשובות שיש להגדיר בסקריפט game.py:

  1. עושים import למודול webapp2
  2. כותבים מחלקה שיורשת מwebapp2.RequestHandler, וגם מגדירה פונקציית get
  3. בסוף פונקציית הget צריך להיות self.response.write(str) אשר תפלוט לדפדפן את תוכן העמוד
  4. הגדרה של הכתובת שבה המחלקה מטפלת.

שימו לב שבמסגרת 4 אתם צריכים לשנות רק את הכתובת בגירשיים ואת שם המחלקה שיתאים למה שכתבתם למעלה

9 of 12

שאלות על app.yaml

שאלות?

10 of 12

Templates

  • מנוע הטמפלייטים הדיפולטיבי של App Engine הוא Django
  • טמפלייט של Django הוא פשוט קובץ טקסט (יכול להיות עם כל סיומת) עם טאגים מיוחדים
  • אנחנו קודם כל נֵרַנְדֵר את הטמפלייט ואז נגיש את הפלט של הרינדור לעמוד כלשהו

תיעוד טמפלייטים של Django

11 of 12

בואו נסתכל שוב game.py.

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

html = template.render("web/templates/game.html", template_params)

הפונקצייה הזו יודעת לקחת שדות מהאובייקט ולהכניס אותם בטמפלייט במקומות הרלוונטיים ולהחזיר מחרוזת שהיא בעצם הטמפלייט המֵרוּנְדָר.

נקודות מעניינות לגבי game.html:

  • לפי ה-{% extends "base.html" %} אנחנו יכולים לראות ש-game.html יורש מbase.html ז"א [בדרך כלל] שבקובץ game.html אנחנו מוסיפים על מה שכבר קיים בbase.html
  • אנחנו רואים טאגים של {%if solved %} שזה אומר שיש לוגיקה (בסיסית) גם בטמפלייט

12 of 12

שאלות על templates

שאלות?