اذهب إلى المحتوى
  • 0

كيفية تمرير المتغيرات المحلية local بين المسارات routes في فلاسك Flask؟

Mohssen A Mohssen

السؤال

لدي مسارين في المشروع الخاص بي، المسار الأول يقوم بإنشاء رقم عشوائي  random ويخزنه في متغير random_number ، وفي المسار الثاني أريد أن أستطيع إستعمال هذا المتغير بنفس القيمة:

import random
from flask import Flask, render_template

@app.route('/login', methods=['GET'])
def a():
  random_number = random.random()
  return render_template("login.html") # يتم إرسال إستمارة form والتي سترسل البيانات إلى الصفحة /b

@app.route('/login', methods=['POST'])
def b():
  print(random_number)	# أريد إستعمال المتغير random_number هنا
  # ....

كيف أفعل هذا في فلاسك Flask؟ هل أحتاج إلى استخدام جلسة session أم أن هناك أي حل آخر؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

من الممكن جعل المتغير المذكور عام Global ولكنه مع الوصول المتزامن للمستخدمين لن تتمكن من مراقبة أو إستخدام متغيراتك بشكل جيد,أو بوصف أدق عندما يقوم عدة مستخدمين في نفس اللحظة بتسجيل الدخول سيتم طباعة القيم في نفس اللحظة ,وإذا كنت تريد إستخدام هذا الرقم كتعريف لجلسة المستخدم فلن تتمكن من معرفة الرقم الخاص بكل مستخدم.

لذلك فكر في أساليب أخرى علي سبيل المثال إذا كانت الدالتين يتجاوبان مع نفس صفحة html فيمكنك إرسال القيمة من الدالة الأولى إلى صفحة html حيث يتم الاحتفاظ بالمتغير هناك ضمن حقل نص أو text box, ثم تقوم الدالة الثانية بالحصول عليه عندما تستلم طلب Post عبر 

random_number = request.form['random_number']

إليك المثال الكامل:

login.py

<html>
   <body>      
     <form action = "/login" method = "post">
        <p>Enter Name0:</p>
        <p><input type = "text" name = "nm" /></p>
        <input type="text" style="display:none;" name="random_number" value="{{random_number}}">
        <p><input type = "submit" value = "submit" /></p>
      </form>      
   </body>
</html>

لاحظ هنا قمنا بإخفاء مربع النص Text box

style="display:none;"

وهذا إذا كنا لا نحتاج لعرضه على المستخدمين,

main.py

from flask import Flask, render_template, request
import random

app = Flask(__name__, template_folder='template')


@app.route('/login', methods=['GET']) #وهي التي تعمل عند فتح الصفحةGETالدالتين يحملان نفس المسار بالفعل ولكن انتبه إحداهما 
def a():
    random_number = random.random()
    return render_template("login.html", random_number=random_number)#إرسال المتغير أو بالأحرى قيمته


@app.route('/login', methods=['POST'])#كتسجيل الدخول مثلا POSTوالثانية عند إرسال فورم عبر 
def b():
    random_number = request.form['random_number'] #إستلام قيمة المتغير المنشود
    print("Random Number:{}".format(random_number))
    return render_template('home.html')



if __name__ == "__main__":
    app.run(debug=True)

من المؤكد بأن هناك المزيد والمزيد من الطرق, وأذكر منهم أيضا شئ مما أشرت إليه في نهاية سؤالك وهو الاستفادة من الجلسات وcookie فالكوكيز هي ببساطة تشبه وحدة تخزين مرتبطة بموقعك داخل متصفح كل مستخدم, حيث يمكننا الإحتفاظ بالمتغيرات أو token أو غير ذلك بداخلها, بغاية إفادة المستخدمين وجعل تجربتهم لموقعك أفضل وبالطبع هى ليست مناسبة لكل شئ, ولكن لكل مقام مقال, وعادة ما تكون مضطراً لإختيار الأداة التى تناسب مشروعك أو التحدى الذي يواجهك.

 

تم التعديل في بواسطة Mohammed_Emad
GET&POST
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...