English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

نماذج Flask

يمكن لـ Flask إرجاع مخرجات دالة موصوفة بنوع HTML لـ URL معين. على سبيل المثال، في السكربت التالي، سيتم عرض func hello() باستخدام علامة <h1> الإضافية ‘Hello World’

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ar.oldtoolbag.com
# Date : 2020-08-08
من Flask import Flask
 app = Flask(__name__)
 @app.route('/')
 تعريف func index():
     الرجوع '<html><body><h1>Hello World</h1></body></html>'
 if __name__ == '__main__':
     app.run(debug=True)

لكن، إن توليد محتوى HTML من كود Python يمكن أن يكون معقدًا، خاصة عند الحاجة إلى وضع بيانات متغيرة وكتل لغة Python (مثل الشروط أو الدورات) فيها. غالبًا ما تحتاج إلى إزالة النصوص من HTML.

يمكنه استخدام تقنية محرك نموذج Jinja2 دون الحاجة إلى إرجاع HTML مكتوب يدويًا من الدالة. كما يظهر في الكود التالي، يمكن استخدام func render_template() لعرض ملف HTML.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ar.oldtoolbag.com
# Date : 2020-08-08
من Flask import Flask
 app = Flask(__name__)
 @app.route('/')
 تعريف func index():
    الرجوع render_template('hello.html')
 if __name__ == '__main__':
    app.run(debug=True)

سيسعى Flask إلى العثور على مجلد templates في نفس المجلد الذي يحتوي على هذا السكربت. بنية مجلد تطبيق يستخدم النمذجة تظهر كما يلي -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ar.oldtoolbag.com
# Date : 2020-08-08
app.py
 hello.py
     templates
         hello.html
         register.html
         ....

يُشار إلى نظام نموذج الويب بتصميم سكربت HTML يمكنه إدراج بيانات متغيرة ديناميكيا. يتكون نظام نموذج الويب من محرك النمذجة، مصدر بيانات معين، ومحول النموذج.

يستخدم Flask محرك النمذجة Jinga2. نموذج الويب يحتوي على نصوص HTML تستخدم كمساهمات للاشارات (في هذه الحالات هي تعبيرات Python)، ويتم استبدال هذه الاشارات بالقيم عند عرض النموذج.

الكود التالي في النمذجة ( templates) في مجلد كما يلي: hello.html

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ar.oldtoolbag.com
# Date : 2020-08-08
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>معالجة طلبات HTTP Flask</title>
 </head>
    <body>
       <h1>Hello {{ name }}!</h1>
    </body>
 </html>

ثم، احفظ الكود التالي في app.pyفي الملف، ثم قم بتشغيله من shell Python -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ar.oldtoolbag.com
# Date : 2020-08-08
from flask import Flask, render_template
 app = Flask(__name__)
 @app.route('/hello/<user>')
 تعريف func hello_name(user):
     الرجوع render_template('hello.html', name = user)
 if __name__ == '__main__':
     app.run(debug=True)

عند بدء تشغيل خادم التطوير، افتح المتصفح وأدخل عنوان الURL - http://localhost:5000/hello/maxsu

يتم إدراج جزء URL المتغير في مكان الوكيل {{name}}.

استخدم محرك النمذجة Jinja2 هذه المحددات لتحويل النصوص من HTML.

{% ... %} لسطرين أو أكثر {{ ... }} لطباعة التعبيرات إلى النمذجة {# ... #} للاشارات غير المدرجة في الناتج النمذجي # ... ## لسطر واحد

في هذا المثال، يتم عرض استخدام جملة الشرط في النمذجة. تقوم دالة hello() بنظام URL الذي يقبل المعامل العددي. يتم نقل هذا المعامل إلى نموذج hello.html. في الداخل، يتم مقارنة القيمة المرسلة (النقاط) مع 50، مما يؤدي إلى تنفيذ عرض الناتج HTML بشكل مشروط.

سكربت Python كما يلي -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ar.oldtoolbag.com
# Date : 2020-08-08
from flask import Flask, render_template
 app = Flask(__name__)
 @app.route('/hello/<int:score>')
 def hello_name(score):
     return render_template('hello.html', marks = score)
 if __name__ == '__main__':
     app.run(debug=True)

ملف النمذجة: hello.html نص النمذجة HTML كما يلي -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ar.oldtoolbag.com
# Date : 2020-08-08
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>مثال نموذج Flask</title>
 </head>
    <body>
       {% if marks>50 %}
       <h1>تم اختبار النجاح!</h1>
       {% else %}
       <h1>لم يتم اختبار النجاح!</h1>
       {% endif %}
    </body>
 </html>

لاحظ أن جملة الشرط if-else وendif تحتوي على محددات {%..%.}

تشغيل سكربت Python واستخدام URL => http://localhost/hello/60، ثم استخدام http://localhost/hello/59، لعرض الناتج HTML بشكل مشروط.

هيكل الاستدلال في Python يمكن استخدامه أيضًا في النمذجة. في السكربت التالي، عند فتح URL في المتصفح => http://localhost:5000/result، سيرسل الدالة result() دالة الدالة إلى ملف النمذجة: results.html

result.html جزء النمذجة يستخدم الدائرة للعرض على وحدات جدول HTML للعناصر والقيم من الدالة result{}.

تشغيل الكود التالي من بيئة Python shell.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ar.oldtoolbag.com
# Date : 2020-08-08
from flask import Flask, render_template
 app = Flask(__name__)
 @app.route('/result')
 def result():
     dict = {'phy':59,'che':60,'maths':90}
     return render_template('result.html', result = dict)
 if __name__ == '__main__':
     app.run(debug=True)

حفظ النص التالي كملف نموذج في مجلد التمplates ( templates) ملف النمذجة المطلوب: result.html

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ar.oldtoolbag.com
# Date : 2020-08-08
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>مثال نموذج Flask</title>
 </head>
    <body>
       <table border="1">
          {% for key, value in result.items() %}
             <tr>
                <th> {{ key }} </th>
                <td> {{ value }} </td>
             </tr>
          {% endfor %}
       </table>
    </body>
 </html>

في هذا السياق، تحتوي جملة Python التي تتوافق مع دورة For على {%...%}، بينما يتم وضع مفتاح التعبير والقيمة في {{}}.

بعد بدء التطوير، افتح في متصفح الويب http://localhost:5000/result للحصول على النتيجة التالية.