راه اندازی اولیه فلسک اولین گام برای ورود به دنیای توسعه وب با پایتون است.
در این راهنما، از نصب پایتون و ایجاد محیط مجازی تا ساخت اولین اپلیکیشن Flask و اجرای آن را گام‌به‌گام بررسی می‌کنیم.
ساختار پروژه، مسیریابی، قالب‌ها و فایل‌های استاتیک را با مثال‌های عملی یاد می‌گیرید.
همچنین خطاهای رایج و بهترین شیوه‌ها را مرور می‌کنیم.
در پایان، می‌توانید اولین پروژه Flask خود را به‌صورت حرفه‌ای راه‌اندازی کنید.

شروع کار با یک فریم‌ورک جدید همیشه هیجان‌انگیز و کمی دلهره‌آور است. فلسک به‌دلیل سادگی‌اش، این دلهره را به حداقل می‌رساند. در این راهنما، مسیری را طی می‌کنیم که در پروژه‌های واقعی بارها آزموده شده است.

فلسک چیست و چرا برای اولین پروژه مناسب است؟

فلسک (Flask) یک میکروفریم‌ورک وب برای پایتون است که توسط Armin Ronacher در سال ۲۰۱۰ ساخته شد. برخلاف جنگو (Django) که «باتری‌ها همه‌چیز از پیش نصب شده» را ارائه می‌دهد، فلسک فقط مسیریابی و پردازش درخواست را فراهم می‌کند. این طراحی مینیمال باعث می‌شود فلسک برای اولین پروژه‌ها ایده‌آل باشد، زیرا شما را مجبور نمی‌کند با انبوهی از مفاهیم و ساختارهای از پیش تعریف‌شده درگیر شوید. در ویکی‌پدیا، فلسک به‌عنوان «یک میکروفریم‌ورک وب WSGI برای پایتون» توصیف شده است که «هیچ ابزار یا کتابخانه خاصی را اجباری نمی‌کند».

برای درک بهتر تفاوت فلسک و جنگو، پیشنهاد می‌کنم مقایسه کامل جنگو و فلسک: کدام بهتر است؟ را مطالعه کنید. اگر به‌دنبال یک راهنمای گام‌به‌گام برای فلسک هستید، آموزش فلسک در پایتون نقطه شروع خوبی است.

پیش‌نیازها: نصب پایتون و pip

قبل از هر چیز، باید پایتون و pip (Package Installer for Python) را روی سیستم خود نصب داشته باشید. پایتون از نسخه ۳.۴ به بعد، pip به‌طور پیش‌فرض همراه آن عرضه می‌شود. برای بررسی نسخه پایتون، در ترمینال یا خط فرمان دستور زیر را اجرا کنید:

python --version

یا در لینوکس و مک:

python3 --version

اگر پایتون نصب نیست، از وب‌سایت رسمی python.org آن را دانلود و نصب کنید. در ویندوز، مطمئن شوید گزینه «Add Python to PATH» را در هنگام نصب فعال می‌کنید. اگر تازه با پایتون آشنا می‌شوید، آموزش پایتون از صفر را ببینید.

برای بررسی نصب pip:

pip --version

اگر pip نصب نبود، با دستور زیر آن را نصب کنید:

python -m ensurepip --upgrade

سپس pip را به آخرین نسخه به‌روز کنید:

python -m pip install --upgrade pip

همان‌طور که در دستورات pip در جنگو: راهنمای کامل توضیح داده شده، pip ابزار اصلی مدیریت پکیج‌های پایتون است و در فلسک نیز همین نقش را دارد.

ایجاد محیط مجازی

محیط مجازی (Virtual Environment) یک فضای ایزوله است که پکیج‌های نصب‌شده در آن، روی محیط سیستمی و سایر پروژه‌ها تأثیری ندارند. این کار از تداخل نسخه‌ها جلوگیری می‌کند و برای هر پروژه فلسک ضروری است. برای ایجاد محیط مجازی، در پوشه پروژه خود دستور زیر را اجرا کنید:

python -m venv venv

این دستور یک پوشه به نام venv ایجاد می‌کند که شامل یک نسخه مستقل از پایتون و pip است. برای فعال‌سازی محیط مجازی:

در ویندوز:

venv\Scripts\activate

در لینوکس و مک:

source venv/bin/activate

پس از فعال‌سازی، نام محیط مجازی در ابتدای خط فرمان نمایش داده می‌شود. برای غیرفعال‌سازی:

deactivate

هر بار که پنجره ترمینال جدیدی باز می‌کنید، باید محیط مجازی را دوباره فعال کنید. برای یادگیری اصولی ساخت پروژه‌های پایتون، چرا پروژه‌های Python بهترین راه یادگیری هستند؟ را مطالعه کنید.

نصب فلسک

پس از فعال‌سازی محیط مجازی، نصب فلسک بسیار ساده است. کافی است دستور زیر را اجرا کنید:

pip install flask

این دستور آخرین نسخه پایدار فلسک را همراه با وابستگی‌های آن (Werkzeug، Jinja2، MarkupSafe، ItsDangerous، Click و Blinker) نصب می‌کند. برای تأیید نصب:

pip show flask

خروجی این دستور اطلاعات کاملی شامل نسخه، محل نصب و وابستگی‌ها را نمایش می‌دهد. اگر می‌خواهید نسخه خاصی را نصب کنید:

pip install flask==3.1.0

برای مدیریت وابستگی‌های پروژه، فایل requirements.txt بسازید:

pip freeze > requirements.txt

این فایل را در مخزن گیت قرار دهید تا سایر اعضای تیم بتوانند محیط را بازسازی کنند.

ساخت اولین اپلیکیشن Flask

حالا وقت آن است که اولین اپلیکیشن فلسک خود را بسازید. یک فایل به نام app.py در ریشه پروژه ایجاد کنید و کد زیر را در آن قرار دهید:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello, Flask!'

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

این کد حداقلی‌ترین اپلیکیشن فلسک است. در خط اول، کلاس Flask را import می‌کنیم. سپس یک نمونه از آن با نام app می‌سازیم. با استفاده از دکوراتور @app.route('/')، مسیر ریشه سایت را به تابع hello متصل می‌کنیم. این تابع یک رشته ساده برمی‌گرداند. در نهایت، با app.run(debug=True) سرور توسعه را اجرا می‌کنیم.

برای اجرای این اپلیکیشن، در ترمینال دستور زیر را اجرا کنید:

python app.py

یا از دستور flask run استفاده کنید (پس از تنظیم متغیر محیطی FLASK_APP):

export FLASK_APP=app.py  # در لینوکس و مک
set FLASK_APP=app.py     # در ویندوز
flask run

سپس در مرورگر خود به آدرس http://127.0.0.1:5000 بروید. باید پیام «Hello, Flask!» را ببینید. برای یادگیری ساخت اپلیکیشن‌های کامل‌تر، ساخت اپلیکیشن وب با Flask را ببینید.

اجرای سرور توسعه

فلسک دارای یک سرور توسعه است که برای محیط توسعه طراحی شده است. هرگز از این سرور در محیط تولید استفاده نکنید، زیرا امنیت و کارایی لازم را ندارد. برای اجرای سرور با قابلیت debug (که خطاها را در مرورگر نمایش می‌دهد و کد را به‌طور خودکار reload می‌کند):

flask run --debug

یا با تنظیم متغیر محیطی:

export FLASK_DEBUG=1
flask run

در ویندوز:

set FLASK_DEBUG=1
flask run

حالت debug برای توسعه بسیار مفید است، اما هرگز آن را در تولید فعال نکنید. برای استقرار در تولید، از سرورهای WSGI مانند Gunicorn یا uWSGI به‌همراه Nginx استفاده کنید.

مسیریابی (Routing) در فلسک

مسیریابی در فلسک با دکوراتور @app.route() انجام می‌شود. می‌توانید مسیرهای پویا با متغیر تعریف کنید:

@app.route('/user/')
def show_user_profile(username):
    return f'User: {username}'

@app.route('/post/')
def show_post(post_id):
    return f'Post ID: {post_id}'

فلسک از تبدیل‌کننده‌های نوع مانند int، float، path و uuid پشتیبانی می‌کند. همچنین می‌توانید متدهای HTTP را محدود کنید:

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return 'Logging in...'
    return 'Please log in'

برای ساخت APIهای RESTful با فلسک، ساخت API با پایتون را مطالعه کنید.

قالب‌ها با Jinja2

فلسک از موتور قالب‌بندی Jinja2 استفاده می‌کند. برای استفاده از قالب‌ها، یک پوشه به نام templates در کنار فایل app.py ایجاد کنید. سپس فایل‌های HTML خود را در آن قرار دهید. برای رندر کردن یک قالب:

from flask import render_template

@app.route('/hello/')
def hello_name(name):
    return render_template('hello.html', name=name)

فایل templates/hello.html:

<!DOCTYPE html>
<html>
<head>
    <title>Hello</title>
</head>
<body>
    <h1>Hello, {{ name }}!</h1>
</body>
</html>

Jinja2 از ارث‌بری قالب (Template Inheritance) پشتیبانی می‌کند. یک قالب پایه به نام base.html بسازید:

<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}My Site{% endblock %}</title>
</head>
<body>
    {% block content %}{% endblock %}
</body>
</html>

سپس قالب‌های دیگر از آن ارث‌بری می‌کنند:

{% extends "base.html" %}
{% block title %}Home{% endblock %}
{% block content %}
    <h1>Welcome!</h1>
{% endblock %}

برای کار با دیتابیس و ذخیره داده‌ها، اتصال پایتون به mysql را ببینید.

فایل‌های استاتیک

فایل‌های استاتیک مانند CSS، JavaScript و تصاویر باید در پوشه static قرار گیرند. فلسک به‌طور خودکار این پوشه را در مسیر /static سرو می‌کند. برای لینک دادن به فایل‌های استاتیک در قالب‌ها، از url_for استفاده کنید:

<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">

ساختار پوشه‌ها:

project/
├── app.py
├── templates/
│   └── index.html
└── static/
    ├── style.css
    └── script.js

فرم‌ها و دریافت داده

برای دریافت داده از فرم‌ها، از شیء request استفاده کنید:

from flask import request

@app.route('/submit', methods=['POST'])
def submit():
    name = request.form['name']
    return f'Hello, {name}!'

برای داده‌های GET:

@app.route('/search')
def search():
    query = request.args.get('q', '')
    return f'Searching for: {query}'

همیشه داده‌های ورودی را اعتبارسنجی و پاک‌سازی کنید. هرگز به‌طور مستقیم از ورودی کاربر در کوئری‌های دیتابیس یا دستورات سیستمی استفاده نکنید.

اتصال به دیتابیس با SQLAlchemy

فلسک هیچ ORM ی ندارد، اما رایج‌ترین انتخاب SQLAlchemy است. برای نصب:

pip install flask-sqlalchemy

پیکربندی و تعریف مدل:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return f'User({self.username}, {self.email})'

برای ایجاد جداول:

with app.app_context():
    db.create_all()

برای عملیات CRUD:

# ایجاد
user = User(username='john', email='john@example.com')
db.session.add(user)
db.session.commit()

# خواندن
user = User.query.filter_by(username='john').first()

# به‌روزرسانی
user.email = 'newemail@example.com'
db.session.commit()

# حذف
db.session.delete(user)
db.session.commit()

ساختار پروژه حرفه‌ای

برای پروژه‌های بزرگ، استفاده از Blueprints و Application Factory توصیه می‌شود. ساختار پیشنهادی:

myapp/
├── app/
│   ├── __init__.py
│   ├── models.py
│   ├── routes.py
│   ├── templates/
│   └── static/
├── config.py
├── requirements.txt
└── run.py

فایل app/__init__.py:

from flask import Flask
from .routes import main

def create_app():
    app = Flask(__name__)
    app.register_blueprint(main)
    return app

فایل app/routes.py:

from flask import Blueprint, render_template

main = Blueprint('main', __name__)

@main.route('/')
def index():
    return render_template('index.html')

فایل run.py:

from app import create_app

app = create_app()

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

این ساختار برای پروژه‌های تیمی و مقیاس‌پذیر ضروری است.

خطاهای رایج در راه‌اندازی فلسک

در هنگام راه‌اندازی فلسک، ممکن است با خطاهای رایجی مواجه شوید. یکی از رایج‌ترین خطاها، ModuleNotFoundError: No module named 'flask' است که معمولاً به‌دلیل فعال نبودن محیط مجازی یا نصب نبودن فلسک رخ می‌دهد. مطمئن شوید محیط مجازی فعال است و pip install flask را اجرا کرده‌اید.

خطای دیگر، Address already in use است. این خطا زمانی رخ می‌دهد که پورت ۵۰۰۰ توسط برنامه دیگری اشغال شده باشد. می‌توانید پورت را تغییر دهید:

flask run --port 5001

یا برنامه اشغال‌کننده پورت را متوقف کنید. برای عیب‌یابی خطاهای پایتون، خطای FileNotFoundError در پایتون چیست و چگونه آن را رفع کنیم؟ را ببینید. همچنین اگر با خطاهای مربوط به دیتابیس یا مهاجرت مواجه شدید، چگونه خطاهای رایج Django را سریع و اصولی رفع کنیم؟ می‌تواند الگوی مفیدی ارائه دهد، هرچند برای جنگو است.

خطای TemplateNotFound زمانی رخ می‌دهد که فایل قالب در پوشه templates قرار ندارد یا نام آن اشتباه است. مطمئن شوید پوشه templates در کنار فایل اصلی برنامه قرار دارد.

پرسش‌های پرتکرار درباره راه‌اندازی فلسک

چگونه فلسک را نصب کنم؟

با اجرای pip install flask در محیط مجازی فعال. برای اطمینان از نصب، pip show flask را اجرا کنید.

آیا برای فلسک به محیط مجازی نیاز دارم؟

بله، استفاده از محیط مجازی برای هر پروژه پایتون ضروری است. این کار از تداخل نسخه‌ها جلوگیری می‌کند و مدیریت وابستگی‌ها را ساده‌تر می‌سازد.

چگونه اولین اپلیکیشن فلسک را اجرا کنم؟

یک فایل app.py با کد حداقلی بسازید، سپس python app.py یا flask run را اجرا کنید. سرور روی http://127.0.0.1:5000 اجرا می‌شود.

تفاوت فلسک و جنگو چیست؟

فلسک یک میکروفریم‌ورک مینیمال و انعطاف‌پذیر است، در حالی که جنگو یک فریم‌ورک کامل با ابزارهای از پیش نصب شده است.

چگونه فلسک را در تولید اجرا کنم؟

از سرور WSGI مانند Gunicorn استفاده کنید: gunicorn -w 4 app:app. سپس Nginx را به‌عنوان reverse proxy پیکربندی کنید. هرگز از سرور توسعه در تولید استفاده نکنید.

آیا فلسک از async پشتیبانی می‌کند؟

فلسک از نسخه ۲.۰ از async پشتیبانی می‌کند، اما به‌طور پیش‌فرض synchronous است. برای استفاده کامل از async، از Quart یا FastAPI استفاده کنید.

چگونه فایل‌های استاتیک را در فلسک سرو کنم؟

فایل‌ها را در پوشه static قرار دهید و با url_for('static', filename='style.css') به آن‌ها لینک دهید.

ملاحظات سطح ارشد

در سطح مهندسی ارشد، راه‌اندازی فلسک تنها شروع کار است. برای پروژه‌های تولیدی، باید به معماری، امنیت، مقیاس‌پذیری و نگهداری فکر کنید. یکی از الگوهای پیشرفته، استفاده از Application Factory به‌همراه Blueprints است که به شما اجازه می‌دهد اپلیکیشن را به‌صورت ماژولار سازماندهی کنید. این الگو در Flask: سبک، انعطاف‌پذیر، مناسب API به‌طور کامل توضیح داده شده است.

برای محیط تولید، از Gunicorn یا uWSGI به‌عنوان WSGI Server و Nginx به‌عنوان Reverse Proxy استفاده کنید. پیکربندی امنیتی مانند HTTPS، HSTS، CSP و محدودیت نرخ درخواست را فراموش نکنید. برای مدیریت تنظیمات، از متغیرهای محیطی و فایل‌های .env استفاده کنید.

در پروژه‌های بزرگ، استفاده از Docker برای کانتینری‌سازی و Kubernetes برای orchestration توصیه می‌شود. همچنین، برای پردازش ناهمزمان، Celery را با Redis یا RabbitMQ ترکیب کنید.

یک نکته کمتر شناخته‌شده: می‌توانید از flask shell برای دسترسی به پوسته تعاملی با context اپلیکیشن استفاده کنید. این ابزار برای دیباگ و تست سریع مدل‌ها بسیار مفید است.

«راه‌اندازی فلسک ساده است، اما ساختن یک اپلیکیشن تولیدی با آن نیازمند انضباط معماری و توجه به جزئیات امنیتی و عملکردی است.»

نگاه نهایی

راه‌اندازی اولیه فلسک یک فرآیند ساده و لذت‌بخش است. با نصب پایتون و pip، ایجاد محیط مجازی و نصب فلسک، می‌توانید اولین اپلیکیشن خود را در چند دقیقه بسازید. از مسیریابی و قالب‌ها تا اتصال به دیتابیس، فلسک ابزارهای لازم را در اختیار شما قرار می‌دهد. با رعایت بهترین شیوه‌ها و ساختاردهی درست پروژه، می‌توانید اپلیکیشن‌های مقیاس‌پذیر و حرفه‌ای بسازید.

اگر این راهنما برایتان مفید بود یا تجربه‌ای از راه‌اندازی فلسک دارید، خوشحال می‌شوم در دیدگاه‌ها بشنوم. به‌خصوص اگر با چالشی مواجه شده‌اید و راه‌حل خلاقانه‌ای پیدا کرده‌اید که می‌تواند برای سایر توسعه‌دهندگان مفید باشد.