איך לקבל מידע מטופס ב Flask

כרגע האפפ עובד במחשב שלי (עוד לא העלית להרוקו). באיזה מהלייבים יש את ההתייחסות לבוטסטראפ?

באזור נקודת הזמן הזו

לייק 1

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

יש לי קובץ נוסף בשם routes שמנהל את ההפניות באתר:

ויש עוד קובץ בשם quiz_app שממה שהבנתי מהמדריך נועד לטפל בבעיה של ייבוא מעגלי:
image

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

יש משהו שמונע ממך לשנות את שם הקובץ הראשי ל־app? נראה לי כמו ללכת על בטוח.

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

הייתי פשוט מנסה, אין הרבה מה להפסיד מזה

ביצעתי את השינוי (היה גם צורך כמובן לשנות את ההגדרה בטרמינל ל FLASK_APP=app.py) עכשיו זה רץ על המכונה שלי. שווה פשוט לנסות להעלות את זה בלי להדביק את הקוד ששמת במדריך ולקוות לטוב?

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

איפה בקוד אתה יוצר קובץ?

בתוך routes. אני עושה אימפורט למנוע. המנוע מקבל מהפוסט רשימה של הצ’קבוקסים שהמשתמש בחר. הוא מחלץ ממנה את המידע הדרוש ומפיק קבצים שהוא שומר בתוך תיקיית static.

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

שים לב בבקשה לשאלה שלי: איפה בקוד אתה יוצר קובץ? :slight_smile:

נסה להיעזר ב־https://www.kite.com/python/examples/1499/flask-send-a-static-file

לייק 1

כנראה שהבעיה היא באיך שהקבצים מאוחסנים בשרת. במכונה המקומית אני עושה את זה:
image

ומקבל את זה:

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

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

ה־Internal Server Error אומר שהבקשה לא הושלמה בהצלחה (זו שגיאת HTTP מס’ 500).
נסה לבדוק בלוגים של Heroku למה היא התרחשה.

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

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

דקה של חיפוש בפורומים הייתה פותרת :slight_smile:

לייק 1

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