একটি ভাল code structure ফ্লাস্ক অ্যাপ্লিকেশনের পঠনযোগ্যতা, রক্ষণাবেক্ষণযোগ্যতা এবং স্কেলেবিলিটি নিশ্চিত করতে সাহায্য করে। Flask অ্যাপ্লিকেশন শুরু করতে অনেকেই single-file অ্যাপ তৈরি করেন, কিন্তু যখন অ্যাপ্লিকেশন বড় হয়, তখন কোডের পরিষ্কার এবং কার্যকরী স্ট্রাকচার প্রয়োজন হয়। এটি কোডের রিপিটিশন কমাতে, ডেভেলপমেন্ট এবং টেস্টিং সহজ করতে এবং টিম ওয়ার্ককে আরো কার্যকরী করতে সাহায্য করে।
এখানে একটি ক্লিন কোড স্ট্রাকচার সম্পর্কে বিস্তারিত আলোচনা করা হলো যা আপনাকে Flask অ্যাপ্লিকেশনের জন্য একটি ভালো এবং স্কেলেবল স্ট্রাকচার তৈরি করতে সাহায্য করবে।
১. Basic Project Structure
একটি ক্লিন Flask অ্যাপ্লিকেশনের জন্য সাধারণ ডিরেক্টরি স্ট্রাকচার হতে পারে:
flask_app/
│
├── app/
│ ├── __init__.py # অ্যাপ ইনিশিয়ালাইজেশন এবং কনফিগারেশন
│ ├── routes.py # রাউট এবং ভিউ ফাংশন
│ ├── models.py # ডাটাবেস মডেলস
│ ├── forms.py # ফর্ম ভ্যালিডেশন
│ ├── static/ # CSS, JavaScript, Images
│ └── templates/ # HTML টেমপ্লেট
│
├── migrations/ # ডাটাবেস মাইগ্রেশন ফাইল
├── config.py # কনফিগারেশন সেটিংস
├── requirements.txt # প্রয়োজনীয় প্যাকেজের তালিকা
├── .env # পরিবেশ ভেরিয়েবল (Optional)
└── run.py # অ্যাপ রান করার স্ক্রিপ্ট
এই স্ট্রাকচারে:
app/: অ্যাপ্লিকেশনের সমস্ত কোড এবং লজিক থাকবে।migrations/: ডাটাবেস মাইগ্রেশন ফাইলগুলো থাকবে যদি আপনি SQLAlchemy ব্যবহার করেন।config.py: অ্যাপ্লিকেশনের কনফিগারেশন সেটিংস।requirements.txt: প্রজেক্টের নির্ভরশীল লাইব্রেরির তালিকা।.env: পরিবেশ ভেরিয়েবল যা গোপন কীগুলি এবং সিস্টেম কনফিগারেশন সংরক্ষণ করবে।
২. Flask অ্যাপ্লিকেশন ইনিশিয়ালাইজেশন
Flask অ্যাপ্লিকেশন ইনিশিয়ালাইজেশনের জন্য, সাধারণত __init__.py ফাইল ব্যবহার করা হয়। এটি অ্যাপ্লিকেশনের কনফিগারেশন সেট করে এবং অন্যান্য মডিউল ও ব্লুপ্রিন্ট লোড করে।
উদাহরণ: app/__init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
# ডাটাবেস ইনিশিয়ালাইজেশন
db = SQLAlchemy()
migrate = Migrate()
def create_app(config_filename='config.py'):
app = Flask(__name__)
app.config.from_pyfile(config_filename)
db.init_app(app)
migrate.init_app(app, db)
# ব্লুপ্রিন্ট রেজিস্টার করা
from .routes import main_bp
app.register_blueprint(main_bp)
return app
এখানে:
db: SQLAlchemy ডাটাবেস ইনস্ট্যান্স।migrate: Flask-Migrate ইনস্ট্যান্স ডাটাবেস মাইগ্রেশন পরিচালনার জন্য।
৩. Routes এবং Views
রাউট এবং ভিউ ফাংশন সাধারণত routes.py ফাইলে রাখা হয়। এই ফাইলে অ্যাপের সমস্ত HTTP রাউট এবং তাদের সাথে সম্পর্কিত ভিউ ফাংশন থাকে।
উদাহরণ: app/routes.py
from flask import Blueprint, render_template
# ব্লুপ্রিন্ট তৈরি
main_bp = Blueprint('main', __name__)
@main_bp.route('/')
def index():
return render_template('index.html')
@main_bp.route('/about')
def about():
return render_template('about.html')
এখানে:
- Blueprint ব্যবহৃত হয়েছে যেটি রাউট এবং ভিউ ফাংশনগুলোকে মডুলারভাবে পরিচালনা করতে সহায়ক।
৪. Models (ডাটাবেস মডেলস)
আপনার অ্যাপ্লিকেশনের ডাটাবেস মডেলস models.py ফাইলে রাখা হবে। এটি ডাটাবেসের টেবিল এবং তাদের মধ্যে সম্পর্ক নির্ধারণ করে।
উদাহরণ: app/models.py
from . import db
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}>'
এখানে:
Userক্লাস ডাটাবেসের User টেবিলের প্রতিনিধিত্ব করে।db.Modelব্যবহার করা হয়েছে SQLAlchemy মডেল তৈরি করার জন্য।
৫. Forms (ফর্ম ভ্যালিডেশন)
Flask অ্যাপে ফর্ম ভ্যালিডেশনের জন্য forms.py ফাইল ব্যবহার করা যেতে পারে। এখানে ফর্মের ইনপুট যাচাই করা হয় এবং যেকোনো ত্রুটি বা ব্যতিক্রম ধরা হয়।
উদাহরণ: app/forms.py
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
class NameForm(FlaskForm):
name = StringField('Name', validators=[DataRequired()])
submit = SubmitField('Submit')
এখানে:
FlaskFormব্যবহার করা হয়েছে ফর্ম তৈরির জন্য।wtformsলাইব্রেরি ফর্ম ইনপুট যাচাই করতে ব্যবহৃত হয়।
৬. Templates (HTML টেমপ্লেট)
Flask অ্যাপ্লিকেশনে templates/ ফোল্ডারে HTML টেমপ্লেট রাখা হয়। Flask Jinja2 টেমপ্লেট ইঞ্জিন ব্যবহার করে ডাইনামিক HTML পেজ রেন্ডার করতে সহায়ক।
উদাহরণ: templates/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Home Page</title>
</head>
<body>
<h1>Welcome to the Home Page</h1>
<p>{{ message }}</p>
</body>
</html>
এখানে:
{{ message }}Flask Jinja2 টেমপ্লেট ইঞ্জিনের মাধ্যমে ডাইনামিকভাবে ভ্যালু রেন্ডার করবে।
৭. Configuration (কনফিগারেশন ফাইল)
config.py ফাইলটি অ্যাপ্লিকেশনের কনফিগারেশন সেটিংস সংরক্ষণ করতে ব্যবহৃত হয়।
উদাহরণ: config.py
import os
class Config:
SECRET_KEY = os.environ.get('SECRET_KEY') or 'a_random_secret_key'
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or 'sqlite:///site.db'
এখানে:
SQLALCHEMY_DATABASE_URI: ডাটাবেস URI নির্ধারণ করা হয়েছে।SECRET_KEY: নিরাপত্তার জন্য সিক্রেট কী সেট করা হয়েছে।
৮. Run Flask App
run.py ফাইলটি Flask অ্যাপ্লিকেশন চালানোর জন্য ব্যবহৃত হয়।
উদাহরণ: run.py
from app import create_app
app = create_app()
if __name__ == "__main__":
app.run(debug=True)
এখানে:
create_app()ফাংশনটি Flask অ্যাপ ইনিশিয়ালাইজ করে এবং সেটি চালু করা হয়।
৯. Requirements File
আপনার Flask অ্যাপের জন্য সমস্ত নির্ভরশীল লাইব্রেরির তালিকা requirements.txt ফাইলে রাখা হয়।
উদাহরণ: requirements.txt
Flask==2.1.1
Flask-SQLAlchemy==2.5.1
Flask-Migrate==3.1.0
Flask-WTF==1.0.1
একটি clean code structure Flask অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য খুবই গুরুত্বপূর্ণ, কারণ এটি কোডের রক্ষণাবেক্ষণ এবং স্কেলেবিলিটি নিশ্চিত করে। এই স্ট্রাকচারটি মডুলার এবং পরিচ্ছন্নভাবে অ্যাপ্লিকেশন তৈরিতে সহায়ক। আপনি যদি blueprints, models, forms, এবং views-এর মতো Flask এর বৈশিষ্ট্যগুলি ব্যবহার করেন, তাহলে আপনার অ্যাপ্লিকেশনটি উন্নত এবং সুরক্ষিত হবে, এবং ভবিষ্যতে যখন অ্যাপটি বৃদ্ধি পাবে তখন তা পরিচালনা করা সহজ হবে।
Read more