0 محمد عاطف25 نشر 12 مارس أرسل تقرير نشر 12 مارس نعم بالطبع يمكنك السؤال في أى شئ تريده يمكنك طرح السؤال هنا في قسم الأسئلة العامة وسيتم توفير الإجابات لك من قبل المدربين المتاحين . اقتباس
0 Abdelrehman Elsied نشر 12 مارس الكاتب أرسل تقرير نشر 12 مارس ما فائدة ال redirect في ال flask. مثلا هذا الكود: # Stores registrants in a dictionary from flask import Flask, redirect, render_template, request app = Flask(__name__) REGISTRANTS = {} SPORTS = [ "Basketball", "Soccer", "Ultimate Frisbee" ] @app.route("/") def index(): return render_template("index.html", sports=SPORTS) @app.route("/register", methods=["POST"]) def register(): # Validate name name = request.form.get("name") if not name: return render_template("error.html", message="Missing name") # Validate sport sport = request.form.get("sport") if not sport: return render_template("error.html", message="Missing sport") if sport not in SPORTS: return render_template("error.html", message="Invalid sport") # Remember registrant REGISTRANTS[name] = sport # Confirm registration return render_template("registrants.html", registrants=REGISTRANTS) # @app.route("/registrants") def registrants(): return render_template("registrants.html", registrants=REGISTRANTS) قمت بتعديلة ليصبح: # Stores registrants in a dictionary from flask import Flask, redirect, render_template, request app = Flask(__name__) REGISTRANTS = {} SPORTS = [ "Basketball", "Soccer", "Ultimate Frisbee" ] @app.route("/") def index(): return render_template("index.html", sports=SPORTS) @app.route("/register", methods=["POST"]) def register(): # Validate name name = request.form.get("name") if not name: return render_template("error.html", message="Missing name") # Validate sport sport = request.form.get("sport") if not sport: return render_template("error.html", message="Missing sport") if sport not in SPORTS: return render_template("error.html", message="Invalid sport") # Remember registrant REGISTRANTS[name] = sport # Confirm registration return render_template("registrants.html", registrants=REGISTRANTS) لم أجد أي فرق في الشكل النهائي. فلماذا تمت اضافة redirect و لم نستخدم ال render_template مباشرة. اقتباس
0 محمد عاطف25 نشر 12 مارس أرسل تقرير نشر 12 مارس بتاريخ 9 ساعة قال Abdelrehman Elsied: ما فائدة ال redirect في ال flask. مثلا هذا الكود: # Stores registrants in a dictionary from flask import Flask, redirect, render_template, request app = Flask(__name__) REGISTRANTS = {} SPORTS = [ "Basketball", "Soccer", "Ultimate Frisbee" ] @app.route("/") def index(): return render_template("index.html", sports=SPORTS) @app.route("/register", methods=["POST"]) def register(): # Validate name name = request.form.get("name") if not name: return render_template("error.html", message="Missing name") # Validate sport sport = request.form.get("sport") if not sport: return render_template("error.html", message="Missing sport") if sport not in SPORTS: return render_template("error.html", message="Invalid sport") # Remember registrant REGISTRANTS[name] = sport # Confirm registration return render_template("registrants.html", registrants=REGISTRANTS) # @app.route("/registrants") def registrants(): return render_template("registrants.html", registrants=REGISTRANTS) قمت بتعديلة ليصبح: # Stores registrants in a dictionary from flask import Flask, redirect, render_template, request app = Flask(__name__) REGISTRANTS = {} SPORTS = [ "Basketball", "Soccer", "Ultimate Frisbee" ] @app.route("/") def index(): return render_template("index.html", sports=SPORTS) @app.route("/register", methods=["POST"]) def register(): # Validate name name = request.form.get("name") if not name: return render_template("error.html", message="Missing name") # Validate sport sport = request.form.get("sport") if not sport: return render_template("error.html", message="Missing sport") if sport not in SPORTS: return render_template("error.html", message="Invalid sport") # Remember registrant REGISTRANTS[name] = sport # Confirm registration return render_template("registrants.html", registrants=REGISTRANTS) لم أجد أي فرق في الشكل النهائي. فلماذا تمت اضافة redirect و لم نستخدم ال render_template مباشرة. في الكود لم يتم إستخدام redirect بل تم فقط إستيرادها . وإليك الفرق بين render_template و redirect: render_template: يعرض القالب مباشرة. يبقى المستخدم في نفس مسار URL. إذا قام المستخدم بتحديث الصفحة (refresh)، سيعيد إرسال النموذج (POST request) مما قد يسبب تسجيلات مكررة. redirect: يرسل المستخدم إلى مسار آخر مثلا من /register إلى /registrants. يغير URL في المتصفح يمنع إعادة إرسال النموذج عند تحديث الصفحة اقتباس
0 عبدالباسط ابراهيم نشر منذ 19 ساعة أرسل تقرير نشر منذ 19 ساعة بتاريخ On 12/3/2026 at 03:39 قال Abdelrehman Elsied: ما فائدة ال redirect في ال flask. مثلا هذا الكود: # Stores registrants in a dictionary from flask import Flask, redirect, render_template, request app = Flask(__name__) REGISTRANTS = {} SPORTS = [ "Basketball", "Soccer", "Ultimate Frisbee" ] @app.route("/") def index(): return render_template("index.html", sports=SPORTS) @app.route("/register", methods=["POST"]) def register(): # Validate name name = request.form.get("name") if not name: return render_template("error.html", message="Missing name") # Validate sport sport = request.form.get("sport") if not sport: return render_template("error.html", message="Missing sport") if sport not in SPORTS: return render_template("error.html", message="Invalid sport") # Remember registrant REGISTRANTS[name] = sport # Confirm registration return render_template("registrants.html", registrants=REGISTRANTS) # @app.route("/registrants") def registrants(): return render_template("registrants.html", registrants=REGISTRANTS) قمت بتعديلة ليصبح: # Stores registrants in a dictionary from flask import Flask, redirect, render_template, request app = Flask(__name__) REGISTRANTS = {} SPORTS = [ "Basketball", "Soccer", "Ultimate Frisbee" ] @app.route("/") def index(): return render_template("index.html", sports=SPORTS) @app.route("/register", methods=["POST"]) def register(): # Validate name name = request.form.get("name") if not name: return render_template("error.html", message="Missing name") # Validate sport sport = request.form.get("sport") if not sport: return render_template("error.html", message="Missing sport") if sport not in SPORTS: return render_template("error.html", message="Invalid sport") # Remember registrant REGISTRANTS[name] = sport # Confirm registration return render_template("registrants.html", registrants=REGISTRANTS) لم أجد أي فرق في الشكل النهائي. فلماذا تمت اضافة redirect و لم نستخدم ال render_template مباشرة. أنت محق من ناحية الشكل النهائي للمستخدم لن تلاحظ أي فرق الصفحة ستعرض نفس البيانات في كلتا الحالتين ولكن السبب الرئيسي لاستخدام الـ redirect يكمن في سلوك المتصفح وكيفية تعامله مع البيانات ، وتحديداً لحل مشكلة إعادة إرسال النموذج أي عند استخدام render_template عندما يضغط المستخدم على تسجيل، يقوم المتصفح بإرسال البيانات عبر طلب من نوع POST. و ترد عليه باستخدام render_template مباشرة المتصفح لا يزال يتذكر أن آخر عملية قام بها هي "إرسال بيانات POST". إذا قام المستخدم بتحديث الصفحة (ضغط F5)، ستظهر له رسالة تحذيرية من المتصفح تسأله (هل تريد إعادة إرسال النموذج؟). وإذا وافق المستخدم، سيتم إرسال نفس البيانات مرة أخرى للسيرفر، مما قد يؤدي إلى حفظ نفس الشخص مرتين في قاعدة البيانات ولكن عندما تستقبل بيانات الـ POST بنجاح، بدلاً من عرض الصفحة مباشرة، تقوم بتوجيه المتصفح لصفحة أخرى: return redirect("/registrants"). وقتها سيتغير في المتصفح ليصبح /registrants، وهو أمر منطقي أكثر. وإذا قام المستخدم بتحديث الصفحة ، المتصفح سيقوم ببساطة بإعادة تحميل صفحة /registrants (عبر GET request) دون إعادة إرسال بيانات النموذج، ولن تظهر أي رسالة تحذيرية. اقتباس
السؤال
Abdelrehman Elsied
هل يمكنني سؤال أسئلة في Flask.
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.