TurboGears কি?
TurboGears হল একটি Python web framework যা MVC (Model-View-Controller) আর্কিটেকচার অনুসরণ করে এবং খুবই শক্তিশালী এবং স্কেলেবল ওয়েব অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়। এটি ডেভেলপারদের দ্রুত ওয়েব অ্যাপ্লিকেশন তৈরি করার জন্য প্রয়োজনীয় টুলস সরবরাহ করে, যেমন টেমপ্লেটিং, ORM (Object-Relational Mapping), ফর্ম হ্যান্ডলিং, ইউজার অথেনটিকেশন ইত্যাদি।
TurboGears এর সাহায্যে আপনি RESTful APIs, পোর্টাল, এবং অন্যান্য ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারবেন, যেখানে স্কেলেবিলিটি এবং সিকিউরিটি গুরুত্বপূর্ণ।
User Registration এবং Login সিস্টেম তৈরি করা
একটি সিকিউর এবং কার্যকরী User Registration এবং Login সিস্টেম তৈরি করা সাধারণত একটি ওয়েব অ্যাপ্লিকেশনের প্রাথমিক কাজ। TurboGears ব্যবহারের মাধ্যমে, আমরা একটি সাধারণ অথেনটিকেশন সিস্টেম তৈরি করতে পারি, যা ইউজারের ডেটাবেসে রেজিস্ট্রেশন এবং লগিন করার সুবিধা দিবে।
ধাপ ১: TurboGears ইনস্টলেশন
প্রথমে, TurboGears ইনস্টল করতে হবে। আপনি এটি Python এর প্যাকেজ ম্যানেজার pip ব্যবহার করে ইনস্টল করতে পারেন:
pip install TurboGears2
ধাপ ২: নতুন TurboGears প্রোজেক্ট তৈরি করা
TurboGears প্রোজেক্ট শুরু করতে, টার্মিনালে নিচের কমান্ডটি চালান:
gearbox quickstart myproject
এটি আপনার প্রোজেক্টের জন্য একটি নতুন ডিরেক্টরি তৈরি করবে এবং সমস্ত প্রাথমিক ফাইল এবং কনফিগারেশন সহ সেটআপ করবে।
ধাপ ৩: মডেল তৈরি করা
এখন আমাদের একটি User মডেল তৈরি করতে হবে যাতে ইউজারের নাম, ইমেইল, পাসওয়ার্ড এবং অন্যান্য তথ্য সংরক্ষণ করা যাবে। TurboGears ORM ব্যবহারের জন্য SQLAlchemy ব্যবহার করা হয়।
myproject/model.py ফাইলে User মডেলটি তৈরি করুন:
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import validates
from myproject.model import Base
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String(50), unique=True, nullable=False)
email = Column(String(100), unique=True, nullable=False)
password = Column(String(100), nullable=False)
@validates('email')
def validate_email(self, key, email):
if '@' not in email:
raise ValueError("Invalid email address")
return email
@validates('password')
def validate_password(self, key, password):
if len(password) < 6:
raise ValueError("Password must be at least 6 characters long")
return password
এখানে User মডেলটি একটি SQLAlchemy ক্লাস, যা টেবিলের সাথে ম্যাপ করে এবং ইউজারের ডেটা (যেমন ইউজারনেম, ইমেইল, পাসওয়ার্ড) স্টোর করতে ব্যবহৃত হবে।
ধাপ ৪: রেজিস্ট্রেশন ফর্ম তৈরি করা
এখন, আমাদের ইউজার রেজিস্ট্রেশন ফর্ম তৈরি করতে হবে, যা ইউজার থেকে ইনপুট নেবে এবং ডেটাবেসে সেভ করবে। TurboGears এর formencode ব্যবহার করা হয় ফর্ম ভ্যালিডেশনের জন্য।
myproject/forms.py ফাইলে ইউজার রেজিস্ট্রেশন ফর্ম তৈরি করুন:
from formencode import Schema, validators
from myproject.model import User
from sqlalchemy.exc import IntegrityError
class UserRegistrationForm(Schema):
username = validators.String(not_empty=True)
email = validators.Email(not_empty=True)
password = validators.String(not_empty=True)
def validate(self, value):
"""Custom validation to check if the user already exists."""
username = value.get('username')
email = value.get('email')
# Check if username or email already exists
if User.query.filter_by(username=username).first():
raise validators.Invalid('Username already exists')
if User.query.filter_by(email=email).first():
raise validators.Invalid('Email already exists')
return value
এই ফর্মটি ইউজারের নাম, ইমেইল এবং পাসওয়ার্ড ভ্যালিডেশন করবে এবং যদি একই নাম বা ইমেইল ইতিমধ্যেই ডাটাবেসে থাকে, তাহলে একটি ত্রুটি বার্তা প্রদান করবে।
ধাপ ৫: রেজিস্ট্রেশন ভিউ তৈরি করা
আমরা এখন একটি ভিউ তৈরি করব যা রেজিস্ট্রেশন ফর্মকে রেন্ডার করবে এবং ইউজারকে ডেটাবেসে সেভ করবে।
myproject/controllers.py ফাইলে রেজিস্ট্রেশন ভিউ তৈরি করুন:
from tg import expose, redirect, request
from myproject.forms import UserRegistrationForm
from myproject.model import DBSession, User
from sqlalchemy.exc import IntegrityError
from pyramid.view import view_config
class RootController(BaseController):
@expose('myproject.templates.registration')
def registration(self):
form = UserRegistrationForm()
if request.method == 'POST':
try:
form_result = form.to_python(request.POST)
user = User(username=form_result['username'],
email=form_result['email'],
password=form_result['password'])
DBSession.add(user)
DBSession.flush() # Commit the transaction
return redirect('/login') # Redirect to login page after successful registration
except IntegrityError:
DBSession.rollback()
form.errors = ['Username or email already exists']
return dict(form=form)
এখানে, আমরা registration মেথডে ফর্ম ভ্যালিডেশন করেছি এবং যদি সবকিছু ঠিক থাকে, তবে ইউজারের তথ্য ডাটাবেসে সেভ করেছি। সেভ করার পর আমরা ইউজারকে login পেজে রিডিরেক্ট করছি।
ধাপ ৬: লগিন সিস্টেম তৈরি করা
লগিন সিস্টেমের জন্য, ইউজারের পাসওয়ার্ড যাচাই করা এবং সেশন পরিচালনা করা হবে। TurboGears সেশনের মাধ্যমে ইউজার সাইন-ইন এবং সাইন-আউট পরিচালনা করতে পারে।
myproject/controllers.py ফাইলে লগিন ফাংশনটি যোগ করুন:
from tg import expose, redirect, request, session
from myproject.model import User
from hashlib import sha256
class RootController(BaseController):
@expose('myproject.templates.login')
def login(self):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# Hashing the password
hashed_password = sha256(password.encode('utf-8')).hexdigest()
# Check if the username and password are correct
user = User.query.filter_by(username=username, password=hashed_password).first()
if user:
session['user_id'] = user.id
return redirect('/dashboard')
else:
return dict(error="Invalid username or password")
return dict()
এখানে, আমরা পাসওয়ার্ড হ্যাশিং ব্যবহার করছি এবং লগিন ডেটা যাচাই করছি। সফল লগিন হলে ইউজার সেশন শুরু হয়ে dashboard পেজে রিডিরেক্ট হবে।
সারাংশ
এই উদাহরণে, আমরা TurboGears ব্যবহার করে একটি User Registration এবং Login সিস্টেম তৈরি করেছি। এতে SQLAlchemy ORM ব্যবহার করে ডেটাবেস মডেল তৈরি করা হয়েছে এবং formencode দিয়ে ফর্ম ভ্যালিডেশন করা হয়েছে। আমরা TurboGears এর সেশন হ্যান্ডলিং এবং পাসওয়ার্ড হ্যাশিং ব্যবহার করেছি ইউজার অথেনটিকেশন করার জন্য। TurboGears এর শক্তিশালী টুলস এবং ফ্রেমওয়ার্ক ব্যবহারের মাধ্যমে, দ্রুত এবং সুরক্ষিত ওয়েব অ্যাপ্লিকেশন তৈরি করা সম্ভব।
Read more