Table of Contents
شروع عملی: ساخت وبسرور با Flask
در بخش «آشنایی با Flask» با این فریمورک بهطور کلی آشنا شدهاید. اینجا قدمبهقدم یک وبسرور بسیار ساده میسازیم که روی کامپیوتر شما اجرا میشود و در مرورگر قابل مشاهده است.
هدف این بخش:
- ساخت یک وبسرور مینیمال با Flask
- تعریف چند مسیر ساده (Route)
- نمایش متن ساده در مرورگر
- درک چرخهٔ اجرای درخواست تا پاسخ (بدون ورود به جزئیات Templateها و فرمها که در فصل بعد میآیند)
پیشنیازها
برای ادامهٔ این بخش فرض میکنیم:
- پایتون روی سیستم شما نصب است.
- Flask را نصب کردهاید (در فصل «آشنایی با Flask» یا «استفاده از کتابخانهها» طریقه نصب را دیدهاید). اگر نصب نیست:
pip install flaskیا روی بعضی سیستمها:
pip3 install flaskساخت اولین فایل وبسرور
۱. یک پوشهٔ جدید بسازید، مثلاً با نام my_first_webapp.
۲. داخل این پوشه، یک فایل جدید بسازید: app.py.
کد زیر را در app.py قرار دهید:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "سلام! این اولین وبسرور سادهٔ من با Flask است."
if __name__ == "__main__":
app.run()در این کد چه اتفاقی میافتد (بهصورت خیلی خلاصه و فقط مخصوص این مثال):
Flaskرا وارد میکنیم تا بتوانیم از آن استفاده کنیم.- با
app = Flask(__name__)یک «برنامهٔ وب» میسازیم. - با
@app.route("/")میگوییم اگر کاربر به آدرس اصلی سایت (ریشه) یعنی/رفت، تابعhomeاجرا شود. - تابع
homeیک متن معمولی (رشتهٔ پایتون) برمیگرداند. - بخش
if __name__ == "__main__":باعث میشود وقتی فایل را مستقیم اجرا میکنیم، وبسرور روشن شود.
اجرای وبسرور
در همان پوشهای که app.py است، ترمینال (یا Command Prompt) را باز کنید و بنویسید:
python app.py
(اگر سیستم شما از python3 استفاده میکند:)
python3 app.pyاگر همه چیز درست باشد، در ترمینال چیزی شبیه به این میبینید:
* Serving Flask app 'app'
* Debug mode: off
* Running on http://127.0.0.1:5000حالا:
- مرورگر خود را باز کنید.
- در نوار آدرس، این را وارد کنید:
http://127.0.0.1:5000/ - باید متن زیر را ببینید:
سلام! این اولین وبسرور سادهٔ من با Flask است.
این یعنی وبسرور شما در حال اجرا است و درخواستهای مرورگر را پاسخ میدهد.
مفهوم «مسیر» (Route) در وبسرور ساده
وبسرور شما میتواند چندین آدرس مختلف داشته باشد. مثلاً:
/برای صفحهٔ اصلی/aboutبرای صفحهٔ «درباره ما»/helloبرای صفحهٔ سلام
در Flask، هر آدرس را با یک دکوریتور @app.route تعریف میکنیم.
کد زیر را به همان فایل app.py اضافه کنید (زیر تابع home):
@app.route("/about")
def about():
return "این یک صفحهٔ سادهٔ about است."
@app.route("/hello")
def hello():
return "سلام از مسیر /hello!"
حالا دوباره (اگر سرور در حال اجراست، لازم نیست دوباره اجرا کنید؛ ولی اگر بستهاید، دوباره python app.py را اجرا کنید) به این آدرسها بروید:
http://127.0.0.1:5000/abouthttp://127.0.0.1:5000/hello
و متنهای تعریفشده را ببینید.
نکتههای مهم این وبسرور ساده:
- هر تابعی که با
@app.route("...")تزئین شده باشد، وقتی کاربر به آن آدرس برود، اجرا میشود. - خروجی تابع باید چیزی باشد که Flask بتواند به مرورگر برگرداند؛ در سادهترین حالت یک رشته (
str) است.
فعال کردن حالت دیباگ (برای توسعه)
برای اینکه هنگام تغییر کد لازم نباشد هر بار سرور را دستی خاموش و روشن کنید، میتوانید حالت توسعه (Debug) را روشن کنید.
کد app.run() را به این شکل تغییر دهید:
if __name__ == "__main__":
app.run(debug=True)حالا وقتی فایل را ذخیره کنید، Flask خودش سرور را ریاستارت میکند و تغییرات را اعمال میکند.
هشدار کوتاه:
حالت debug=True فقط برای محیط توسعه (روی کامپیوتر خودتان) مناسب است، نه برای سرور واقعی در اینترنت.
استفاده از متغیر در آدرسها (Route با پارامتر)
گاهی میخواهید آدرس شما بخش متغیر داشته باشد، مثل:
/user/ali/user/sara
میتوانیم در تعریف مسیر، یک قسمت متغیر بگذاریم. مثال:
@app.route("/user/<name>")
def user_page(name):
return f"سلام {name} عزیز!"حالا:
- با
http://127.0.0.1:5000/user/aliمتنسلام ali عزیز! - و با
http://127.0.0.1:5000/user/saraمتنسلام sara عزیز!
را خواهید دید.
چند نکته:
<name>در آدرس، نام یک پارامتر است.- همین نام باید در آرگومان تابع (
name) استفاده شود. - داخل تابع میتوانید از این مقدار مثل هر متغیر معمولی استفاده کنید.
نمایش چند خط متن یا HTML ساده
تا اینجا فقط متن ساده برگرداندیم. وبصفحهها معمولا با HTML ساخته میشوند. در این بخش هنوز وارد بحث Templateها نمیشویم، فقط نشان میدهیم که میتوانید HTML را هم به عنوان رشته برگردانید.
مثال:
@app.route("/html")
def simple_html():
return """
<h1>سلام!</h1>
<p>این یک صفحهٔ HTML خیلی ساده است.</p>
<p>هنوز از قالبها (Templates) استفاده نکردهایم.</p>
"""
حالا با رفتن به http://127.0.0.1:5000/html میبینید که مرورگر HTML را تفسیر میکند (تیتر بزرگ، پاراگراف و ...).
در فصل بعدی («مسیرها و قالبها (Templates)») یاد میگیرید که بهجای نوشتن HTML در رشتهها، از فایلهای جداگانه و تمیز برای قالبها استفاده کنید.
بستن وبسرور
برای خاموش کردن وبسرور:
- به ترمینال برگردید که سرور در آن در حال اجراست.
- کلیدهای
Ctrl + Cرا بزنید.
این کار اجرای سرور Flask را متوقف میکند.
تمرینهای پیشنهادی
چند تمرین کوچک برای تثبیت مفاهیم این بخش:
- وبسایت سهصفحهای کوچک
- یک برنامهٔ Flask بسازید که سه مسیر داشته باشد:
/(صفحهٔ اصلی)/about/contact- هر کدام یک متن متفاوت برگردانند.
- آدرس با نام پویا
- مسیری مثل
/hi/<username>تعریف کنید که بنویسد: سلام username، خوش آمدی!- استفاده از چند خط HTML
- مسیری بسازید که یک فهرست (
<ul>) از سه آیتم مورد علاقهٔ شما (مثلاً غذا، فیلم یا شهر) را در HTML نمایش دهد. - ترکیب متن ثابت و متغیر
- مسیری بسازید مانند
/square/<number>که عدد را بگیرد و مربع آن را حساب کند و نمایش دهد، مثلاً: - آدرس:
/square/5 - خروجی:
عدد 5، مربعش 25 است.
در فصل بعدی، یاد میگیرید چطور این وبسرور ساده را با استفاده از مسیرهای بیشتر و قالبها (Templates) به یک وبسایت مرتبتر و قابلگسترش تبدیل کنید.