Flask برخلاف فریمورکهایی مثل Django، ساختار تحمیلی ندارد و آزادی عمل بیشتری در طراحی معماری پروژه در اختیار توسعهدهنده قرار میدهد. به همین دلیل انتخاب محبوبی برای پروژههای سبک تا متوسط، میکروسرویسها و حتی اپلیکیشنهایی است که بهتدریج توسعه مییابند.
همانطور که DigitalOcean اشاره کرده: «Flask یک فریمورک سبک و قابلدسترس برای توسعهدهندگان تازهکار است و به آنها امکان میدهد تنها با یک فایل پایتون، اپلیکیشن تحت وب راهاندازی کنند.»
در ادامه، قصد داریم یک وباپلیکیشن ساده را با استفاده از Flask در پایتون ۳، مرحلهبهمرحله؛ از ایجاد یک محیط مجازی تا خرید هاست پایتون پیادهسازی کنیم.
مراحل ساخت پروژه Flask به صورت گامبهگام
پیش از شروع مراحل اجرایی، لازم است اطمینان حاصل کنید که محیط توسعه پایتون ۳ روی سیستم شما بهدرستی نصب شده و با مفاهیم پایه پایتون مانند توابع، شرطها و حلقهها آشنایی دارید. همچنین استفاده از محیط مجازی (virtual environment) برای مدیریت وابستگیها، گامی کلیدی پیش از راهاندازی پروژه است. حالا که مقدمات فراهم است، مراحل ساخت اپلیکیشن را با هم آغاز میکنیم:
ایجاد و فعالسازی محیط مجازی
برای مدیریت بهتر وابستگیهای پروژه و جلوگیری از تداخل با سایر پروژههای پایتون، باید ابتدا یک محیط مجازی ایجاد کنید. این محیط به شما کمک میکند کتابخانههایی مانند Flask را بهصورت ایزوله نصب کنید.
$ python3 -m venv env $ source env/bin/activate |
با فعالسازی موفق محیط، ترمینال شما با پیشوند (env) شروع خواهد شد. حالا آماده نصب Flask هستید.
نصب Flask و ایجاد فایل اصلی برنامه
اکنون Flask را با pip نصب میکنید و یک فایل پایتونی به نام app.py یا hello.py میسازید تا اولین endpoint خود را تعریف کنید:
(env) $ pip install flask (env) $ nano app.py |
محتوای ساده فایل:
from flask import Flask
app = Flask(__name__) @app.route(‘/’) def hello(): return ‘Hello, World!’ |
برای اجرای برنامه، کافی است محیط را به Flask معرفی کرده و آن را در حالت توسعه اجرا کنید:
(env) $ export FLASK_APP=app (env) $ export FLASK_ENV=development (env) $ flask run |
در مرورگر، آدرس http://127.0.0.1:5000 را باز کنید تا پیام «Hello, World!» را ببینید.
وقت آن است ظاهرش را با HTML بهتر کنیم.
استفاده از قالبهای HTML با Jinja
Flask از موتور قالب Jinja برای ساخت صفحات HTML استفاده میکند. با استفاده از render_template() میتوانید فایلهای HTML را در قالب جداگانه مدیریت کنید.
ابتدا پوشهای به نام templates بسازید و فایل index.html را درون آن قرار دهید:
<!DOCTYPE html> <html> <head><title>FlaskBlog</title></head> <body> <h1>Welcome to FlaskBlog</h1> </body> </html> |
در app.py، با این خط کد به قالب وصل شوید:
from flask import render_template @app.route(‘/’) def index(): return render_template(‘index.html’) |
اکنون ظاهر اپلیکیشن شما از حالت خام خارج شده. در ادامه یاد میگیریم چطور با دیتابیس SQLite ارتباط بگیریم.
اتصال به دیتابیس SQLite
برای ذخیرهسازی دادهها از SQLite استفاده میکنیم که بدون نیاز به نصب جداگانه، در پایتون تعبیه شده است. ابتدا فایلی با نام schema.sql بسازید و ساختار جدول پستها را تعریف کنید:
DROP TABLE IF EXISTS posts;
CREATE TABLE posts ( id INTEGER PRIMARY KEY AUTOINCREMENT, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, title TEXT NOT NULL, content TEXT NOT NULL ); |
سپس با اجرای یک اسکریپت Python به نام init_db.py، دیتابیس را ایجاد و داده اولیه وارد کنید. بعد از اتصال دیتابیس، نوبت نمایش پستها در صفحه اصلی است.
نمایش لیست پستها در صفحه اصلی
در تابع index()، پستها را از دیتابیس بخوانید و به قالب index.html بفرستید:
conn = get_db_connection()
posts = conn.execute(‘SELECT * FROM posts’).fetchall() conn.close() |
سپس در HTML با استفاده از حلقه for در Jinja، لیست پستها را نمایش دهید. حالا میتوانیم امکان نمایش جزئیات هر پست را هم اضافه کنیم.
نمایش یک پست خاص با استفاده از ID
برای نمایش هر پست بهصورت مجزا، یک route جدید تعریف کنید:
@app.route(‘/<int:post_id>’) def post(post_id): … return render_template(‘post.html’, post=post) |
در فایل post.html عنوان، تاریخ و متن پست نمایش داده میشود. حالا اپلیکیشن شما محتوای پویا دارد؛ وقت افزودن فرم ارسال پست جدید است.
افزودن فرم ایجاد پست جدید
با ساخت یک route جدید /create و یک فرم HTML، کاربران میتوانند پست جدید ارسال کنند. دادهها از طریق متد POST دریافت و در دیتابیس ذخیره میشوند. فرم سادهای شامل فیلد عنوان و محتوا کافیست.
حالا نیاز به امکان ویرایش و حذف هم داریم.
امکان ویرایش و حذف پستها
برای هر پست، دو مسیر جدید /edit و /delete تعریف میشود. در فرم ویرایش، اطلاعات فعلی نمایش داده شده و امکان ذخیره تغییرات فراهم است. حذف نیز با یک دکمه و تأیید کاربر انجام میشود. در پایان این مراحل، شما صاحب یک وبلاگ کامل با قابلیت ایجاد، نمایش، ویرایش و حذف پستها هستید.
در ادامه با هم مهمترین نکات توسعه امن و بهینه وباپلیکیشن را مرور میکنیم.
نکات کلیدی در توسعه وب اپلیکیشن با Flask
برای اینکه اپلیکیشن Flask شما فراتر از یک پروژه تمرینی باشد، رعایت چند اصل کلیدی ضروری است:
- ساختاردهی پروژه: پوشهبندی مناسب، استفاده از فایلهای مجزا برای views و models و پیادهسازی Blueprints به توسعهپذیری کمک میکند.
- امنیت پایه: از SECRET_KEY قوی، اعتبارسنجی ورودیها و ابزارهایی مثل Flask-WTF برای محافظت در برابر CSRF استفاده کنید.
- مدیریت خطا و پیامها: با try/except، صفحات خطای سفارشی (۴۰۴، ۵۰۰) و فلشپیامها تجربه کاربر را بهبود دهید و لاگگیری را فراموش نکنید.
- استفاده از اکستنشنها: افزونههایی مثل Flask-SQLAlchemy، Flask-Login و Flask-Migrate توسعه اپ را سادهتر و حرفهایتر میکنند.
- آمادهسازی برای انتشار: برای اجرای پروژه در محیط واقعی، از WSGI (مثل Gunicorn)، وبسرور (مثل Nginx) و محیط مجازی روی سرور استفاده کنید.
حالا که وباپلیکیشن پایتونی ما آمادۀ اجراست، وقت جمعبندی است.
جمعبندی
Flask یکی از سریعترین راهها برای تبدیل ایدههای پایتونی به وباپلیکیشن است؛ اما قدرت واقعی آن در سادگیاش نهفته است. این فریمورک به شما اجازه میدهد با حفظ کنترل کامل، پروژهای سبک، ماژولار و قابلگسترش بسازید؛ بدون وابستگی به ساختارهای پیچیده.
اگر تازهکارید، بهترین مسیر یادگیری Flask، پیادهسازی یک پروژه واقعی با دیتابیس و رابط کاربری ساده است. و اگر توسعهدهندۀ باتجربهتری هستید، میتوانید بهکمک اکستنشنها و معماری چندبخشی، پروژههای پیچیدهتر و قابل استقرار در محیط production طراحی کنید.