שאלה לגבי ה-flow של יום 4

לא כל כך ברור לי מה קודם למה: השרטוט של קובץ הhtml או ההפעלה של קובץ app.py,
אני שואל בגלל שבפונקציה אנחנו רואים שימוש בrequests.args שמחזיר כמילון את הקלט שהמשתמש הכניס לאתר, אבל לאחר מכן רואים למטה שהפונקציה hellow_world מחזירה
את הrender_templates שהוא קובץ הhtml, לפי ההגיון נראה לי שקובץ app.py יקדם לקובץ הhtml שיקבל ממנו את הנתונים אבל החלק של קליטת המידע מהמשתמש קורה בחלק של הhtml. אשמח להבהרה בנושא.
צירפתי פה למטה את החלק של app.py:

from flask import Flask, render_template, request

import requests

app = Flask(name)

@app.route(’/’)

def hello_world():

pokemon_name = request.args.get('pokemon_name')

print(request.args)

print(pokemon_name)

if not pokemon_name:

    return render_template('index.html')

resp = requests.get(f'https://pokeapi.co/api/v2/pokemon/{pokemon_name}')

resp_json = resp.json()

images = resp_json['sprites']

images = {k: v for k, v in images.items() if isinstance(v, str)}

return render_template(

    'index.html',

    title_name = pokemon_name,

    sprites = images,

)

תוכל בבקשה לנסח את השאלה בצורה קצת יותר הדרגתית ולסדר את הדבקת הקוד? :slight_smile:

לייק 1

אוקיי, מקווה שההסבר הבא יהיה יותר ברור:
קודם כל התכוונתי לקוד שים כתב בלייב של שבוע 12 יום 4, הקוד הוא של אתר שבו לפי שורת חיפוש אפשר לקבל תמונות של הפוקימון שהוכנס בקלט.
השאלה שלי הייתה:
מה מתרחש קודם? ההרצה של קובץ app.py? או ההרצה של index.html?

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

אפשר לוותר על הקוד אם רוצים, הדבקתי למען הנוחיות את הקוד של קובץ app.py מהווידאו של יום 4 בשבוע 12 (ולא הבנתי איך להדביק אותו אחרת… פשוט הדבקתי את הקוד כמו שהוא):

‘’’

from flask import Flask, render_template, request

import requests

app = Flask(name)

@app.route(’/’)

def hello_world():

pokemon_name = request.args.get('pokemon_name')

print(request.args)

print(pokemon_name)

if not pokemon_name:

    return render_template('index.html')

resp = requests.get(f'https://pokeapi.co/api/v2/pokemon/{pokemon_name}')

resp_json = resp.json()

images = resp_json['sprites']

images = {k: v for k, v in images.items() if isinstance(v, str)}

return render_template(

    'index.html',

    title_name = pokemon_name,

    sprites = images,

)

‘’’

אני שואל את זה בגלל שבפרויקט שלי אני לא מצליח להעביר את הקלט מהמשתמש לתוך משתנה בתוך הקובץ app.py,
כלומר בשורה:
genre = request.args.get(‘genre’)
כשאני מדפיס את genre אני מקבל את הפלט הבא:
ImmutableMultiDict(), כלומר מילון ריק,
ואני לא מבין למה כי אני כן רואה שבurl מועבר המשתנה:
http://127.0.0.1:5000/static/results.html?genre=Comedy

ר’ את האשכול של אביעד כאן:

קובץ app.py מורץ וממתין לבקשות. כשאתה מבקש משהו בכתובת שמופיעה ב־app.route הוא מגיש את מה שכתוב ב־return. אם זה render_template עם קובץ html מסוים, הוא מגיש אותו. בסדר הזה.

אתה לא אמור לגשת ישירות ל־static. אתה אמור ליצור app.route שמגיש לך את static באמצעות render_template

2 לייקים