TurboGears কি?
TurboGears হলো একটি পূর্ণাঙ্গ Python ওয়েব ফ্রেমওয়ার্ক যা দ্রুত, স্কেলযোগ্য এবং সহজে এক্সটেন্ডযোগ্য অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে। এটি MVC (Model-View-Controller) আর্কিটেকচার অনুসরণ করে এবং বিভিন্ন টুলস ও লাইব্রেরি নিয়ে তৈরি, যেমন SQLAlchemy (ডেটাবেস অর্গানাইজেশন), Genshi (টেমপ্লেট রেন্ডারিং), এবং ToscaWidgets (ইউআই উইজেটস)। TurboGears এর মাধ্যেমে আপনি দ্রুত ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারেন এবং সহজেই কোড রিওসেবল করতে পারবেন।
এটি বিশেষভাবে সহজ ও শক্তিশালী ফর্ম হ্যান্ডলিং, ডেটা ভ্যালিডেশন এবং সাবমিশন হ্যান্ডলিং সুবিধা দেয়। TurboGears-এর সাথে ফর্ম তৈরি ও হ্যান্ডল করার প্রক্রিয়া অত্যন্ত সহজ এবং কার্যকরী।
TurboGears এ ফর্ম তৈরি এবং হ্যান্ডল করা
TurboGears-এ ফর্ম তৈরি এবং হ্যান্ডল করা কয়েকটি ধাপে করা হয়:
- ফর্ম ক্লাস তৈরি করা: ফর্মের জন্য একটি ক্লাস তৈরি করা হয় যা ব্যবহারকারীর ইনপুট এবং ফিল্ডের জন্য বৈধতা (validation) এবং অন্যান্য কাস্টম ফাংশনালিটি সংজ্ঞায়িত করে।
- টেমপ্লেট তৈরি করা: ফর্মের HTML রেন্ডার করার জন্য একটি টেমপ্লেট তৈরি করা হয়।
- ফর্ম সাবমিশন হ্যান্ডলিং: ব্যবহারকারী যখন ফর্মটি সাবমিট করে, তখন তার ইনপুট ডেটা গ্রহন করা হয় এবং প্রোসেস করা হয়।
১. ফর্ম ক্লাস তৈরি করা
TurboGears-এ ফর্ম তৈরি করার জন্য FormEncode লাইব্রেরি ব্যবহার করা হয়, যা ফর্ম ভ্যালিডেশন, ট্রান্সফরমেশন এবং অন্যান্য প্রক্রিয়া সহজ করে দেয়।
ফর্ম ক্লাস উদাহরণ:
from tg import expose, redirect
from tg.i18n import ugettext as _
from formencode import Schema, validators
from tg.decorators import validate
class RegisterForm(Schema):
allow_extra_fields = True
filter_extra_fields = True
username = validators.String(not_empty=True)
email = validators.Email(not_empty=True)
password = validators.String(min=6, not_empty=True)
confirm_password = validators.String(min=6, not_empty=True)
def validate_passwords(self, value, state):
if self.password != self.confirm_password:
raise validators.Invalid(_("Passwords do not match"), value, state)
return value
এখানে, RegisterForm একটি ফর্ম ক্লাস তৈরি করা হয়েছে, যার মধ্যে ইউজারনেম, ইমেইল, পাসওয়ার্ড এবং কনফার্ম পাসওয়ার্ড ফিল্ড রয়েছে। এছাড়া, পাসওয়ার্ড ভ্যালিডেশনের জন্য কাস্টম validate_passwords মেথডও তৈরি করা হয়েছে।
২. টেমপ্লেট তৈরি করা
ফর্মের HTML টেমপ্লেট তৈরি করার জন্য Genshi টেমপ্লেট ইঞ্জিন ব্যবহৃত হয়। এখানে আপনি ফর্ম ফিল্ডগুলোকে HTML ফর্মের অংশ হিসেবে রেন্ডার করতে পারেন।
টেমপ্লেট উদাহরণ:
<form method="POST" action="/register">
<label for="username">Username:</label>
<input type="text" name="username" id="username" />
<label for="email">Email:</label>
<input type="text" name="email" id="email" />
<label for="password">Password:</label>
<input type="password" name="password" id="password" />
<label for="confirm_password">Confirm Password:</label>
<input type="password" name="confirm_password" id="confirm_password" />
<input type="submit" value="Register" />
</form>
এখানে, <form> HTML ট্যাগের মধ্যে TurboGears এর মাধ্যমে ফর্ম ফিল্ডগুলো রেন্ডার করা হয় এবং এর সাথে সার্ভার সাইডে ফর্ম ডেটা প্রোসেস করার জন্য POST পদ্ধতি ব্যবহার করা হয়।
৩. ফর্ম সাবমিশন হ্যান্ডলিং
ফর্ম সাবমিট হলে, TurboGears ফর্ম ডেটা গ্রহণ করে এবং এর প্রোসেসিং চালায়। যদি ফর্ম ভ্যালিডেশন সফল হয়, তাহলে ডেটা সংরক্ষণ করা হয় বা অন্য কোনো অ্যাকশন নেয়া হয়। যদি ভ্যালিডেশন ব্যর্থ হয়, তবে ফর্মটি আবার ব্যবহারকারীকে দেখানো হয় এবং ভুল বার্তা প্রদর্শন করা হয়।
ফর্ম সাবমিশন হ্যান্ডলিং উদাহরণ:
from tg import expose, redirect
from tg.i18n import ugettext as _
from myapp.forms import RegisterForm
from formencode import FormValidator
class RootController(object):
@expose('myapp.templates.register')
@validate(schema=RegisterForm(), error_handler=register_error)
def register(self, username, email, password, confirm_password):
# ফর্মের ডেটা সফলভাবে গ্রহন এবং প্রসেস করা
# ডেটাবেসে ইউজার সংরক্ষণ ইত্যাদি
return dict(username=username, email=email)
@expose('myapp.templates.register')
def register_error(self, errors, **kwargs):
# যদি কোনো ভ্যালিডেশন ত্রুটি থাকে তবে আবার ফর্ম দেখান
return dict(errors=errors, **kwargs)
এখানে, register মেথড ফর্ম ডেটা গ্রহণ করে এবং যদি ভ্যালিডেশন সফল হয় তবে ডেটা প্রোসেস করে। যদি ভ্যালিডেশন ব্যর্থ হয়, তবে register_error মেথড ব্যবহার করা হয় যা ত্রুটি বার্তা সহ ফর্ম পুনরায় রেন্ডার করে।
৪. ফর্ম ভ্যালিডেশন এবং এর ব্যবহার
TurboGears ফর্ম ভ্যালিডেশন করার জন্য FormEncode লাইব্রেরি ব্যবহার করে। এই লাইব্রেরির সাহায্যে আপনি ফর্ম ফিল্ডগুলোর জন্য বিভিন্ন প্রকারের ভ্যালিডেশন (যেমন not_empty, email, min_length ইত্যাদি) ব্যবহার করতে পারেন।
ভ্যালিডেশন উদাহরণ:
from formencode import validators
class RegisterForm(Schema):
allow_extra_fields = True
filter_extra_fields = True
username = validators.String(not_empty=True)
email = validators.Email(not_empty=True)
password = validators.String(min=6, not_empty=True)
confirm_password = validators.String(min=6, not_empty=True)
def validate_passwords(self, value, state):
if self.password != self.confirm_password:
raise validators.Invalid(_("Passwords do not match"), value, state)
return value
এখানে, validate_passwords মেথড কাস্টম ভ্যালিডেশন যোগ করছে, যা নিশ্চিত করে যে পাসওয়ার্ড এবং কনফার্ম পাসওয়ার্ড মেলে।
সারাংশ
TurboGears-এ ফর্ম তৈরি এবং হ্যান্ডল করা খুবই সহজ এবং কার্যকরী। আপনি FormEncode লাইব্রেরি ব্যবহার করে ফর্ম ভ্যালিডেশন করতে পারেন এবং Genshi টেমপ্লেট ইঞ্জিন ব্যবহার করে ফর্ম রেন্ডারিং করতে পারেন। TurboGears ফর্ম সাবমিশন প্রক্রিয়া সহজ করে তোলে, এবং ব্যবহারকারীর ইনপুট ডেটা গ্রহণ, ভ্যালিডেশন এবং প্রোসেসিং সহ সবকিছু দ্রুত বাস্তবায়ন করা যায়।
Read more