פרטי תוכנה:
XHPy משתרע תחביר פייתון, כך שברי XML הפכו ביטויי Python תקפים.
יתרונות
& Nbsp; * פשטות: לכתוב היגיון UI בתחביר פשוט, הבעה ללא הצורך בתבניות חיצוניות או שפות בניית תבנית.
& Nbsp; * גמישות: ביטויי Python שימוש בחופשיות בתוך תגי XHPy, ולהיפך.
& Nbsp; * אבטחה: תועלת לברוח אוטומטי של טקסט בתוך תגי XHPy.
& Nbsp; * Reusability: לבנות רכיבים לשימוש חוזר בsubclassing: x: אלמנט.
דוגמא
בbar.py:
מregister_xhpy_module יבוא xhpy.init
("Foo") register_xhpy_module
foo יבוא
בfoo.py:
מ- * יבוא xhpy.pylib
כיתה: ui: foo (: x: אלמנט):
& Nbsp; בר רשימת תכונות
& Nbsp; זרימת% קטגוריה
& Nbsp; def להבהיר (עצמי):
& Nbsp; =
& Nbsp; לb בself.getAttribute ('bar'):
& Nbsp; a.appendChild (
& Nbsp; לחזור
הדפסה
כעת אנו יכולים לרוץ bar.py כסקריפט פייתון רגיל:
bar.py פיתון $
- 0
- 1
- 2
מזל טוב! אתה פשוט כתב הקטע הראשון שלכם בXHPy.
תחביר
XHPy מוסיף כמה תחביר חדש לפייתון. קו זמן שידור חוזר קו על ידי!
מregister_xhpy_module יבוא xhpy.init
זה מאתחל XHPy ומאפשר לך לרשום מודולים להתפרש כXHPy.
("Foo") register_xhpy_module
עכשיו מודול foo בfoo.py יתפרש כXHPy שבו יובא. אם foo היה חבילה, כל submodules היה גם להיות רשום; זה שימושי לרישום ספריות ממשק משתמש.
foo יבוא
כדי להשתמש למעשה XHPy, עם זאת, סביר להניח שאתה רוצה ספריית הליבה:
מ- * יבוא xhpy.pylib
עכשיו יש לך גישה לכל HTML 4.0 האלמנטים סטנדרטיים,: x: מחלקת בסיס אלמנט (זה מה שאתה בונה רכיבים מותאמים אישית על גבי!), ועוד כמה כלי עזר.
כיתה: ui: foo (: x: אלמנט):
מה שהופך את הרכיבים חדשים הוא קל: פשוט תת: x: אלמנט. לכיתת רכיבך להיות רשומה, הוא חייב להתחיל עם: - זה ברור שמבדיל הרכיבים שלך משיעורי Python רגילים.
מייחס בר רשימה
זוהי הצהרת תכונה, כלומר: ממשק משתמש: foo מאפשר בר מייחס ב< ui: foo> תגים. שים לב ל
בשלב מאוחר יותר - כמו XHP, XHPy משתמש בתחביר תכונת XML.
זרימת% קטגוריה
זאת הצהרת קטגוריה -: ui: foo הוא חלק מקטגורית זרימת%. קטגוריות הן בעיקר שימושיות כדרך לזיהוי אלמנטים הדומים ללא שימוש בירושה; לדוגמא, יש לו את התג <> בpylib.html
ילדים (PCDATA | זרימת%) *
מצביע על כך שהילדים שלה חייבים גם לכלול טקסט או להיות בקטגורית זרימת%. (אז אנחנו יכולים לשים
def להבהיר (עצמי):
בעת ההדפסה: x: אלמנט (או להתקשר str על זה), להבהיר () שיטה מופעלת; זה איפה אתה שם את היגיון ממשק המשתמש שלכם.
=
לb בself.getAttribute ('bar'):
& Nbsp; a.appendChild (
לחזור
כאן,
- המאפשרת לך לבנות רשימה לא מסודרת מתוך רשימת Python. אלמנטי HTML סטנדרטיים כמו
- ניתנים באופן אוטומטי - פרט לכך ש, בXHPy, אתה יכול להשתמש בביטויי Python בתוך תגים, כך ש
{ב}
הוא הוחלף על ידי הערך של b. שים לב לשימוש של getAttribute () וappendChild ():
self.getAttribute ('bar')
מביא את הערך של בר תכונה (במקרה זה, טווח (3)), ואילו
a.appendChild ( - {ב} )
- {ב} כילד של =
- Python
- ו-
מוסיף
XHPy מבוסס במידה רבה את XHP; לפרטים נוספים על אלה האחרונים, ראו 'ויקי XHP
& Nbsp; * כיתת XHPy שמות ניתן להשתמש בכיתות רגילות בכל מקום Python יכולים;
& Nbsp; * תגי XHPy להתעלם רווחים פנימיים, אבל חייבים לציית לכללים חיצוניים הזחה והמשך השורה.
עוד על הנקודה האחרונה:
foo def (href):
& Nbsp; תשואה
בר def (href):
& Nbsp; לחזור
& Nbsp;
תקפים, ואילו
foo def (href):
& Nbsp; לחזור
& Nbsp;
& Nbsp; >
לא, כפי שהוא מציג dedent נוסף לאחר >.
איך זה עובד
כאשר אתה
xhpy.init יבוא
XHPy מתקין וו יבוא. מלכודות זה וו הצהרות יבוא שלאחר מכן, מפעילים אותם דרך עיבוד מוקדם שמנתח-על של פייתון. preprocessor זה מתרגם תגי XHPy ושמות בכיתה לPython תקף, אז מבצע את הקוד המתורגם בהיקף מודול.
זה דומה לאופן שבי XHP עובד, למעט:
& Nbsp; * עם, למשל, pythonenv, אתה תמיד יכול להשתמש XHPy גם ללא גישה לספריות התקנת חבילת Python מערכתית;
. & Nbsp; * כברירת מחדל, Python הידור .pyc קבצי bytecode מהמודולים שלך, כך העיבוד המקדים רק צריך להיעשות פעם אחת כאשר מודול מיובא ראשון
דרישות :
תגובות לא נמצא