Web2Py তে Forms এবং Validation অ্যাপ্লিকেশন ডেভেলপমেন্টের গুরুত্বপূর্ণ অংশ। Web2Py সরাসরি ফর্ম তৈরি করার জন্য SQLFORM ব্যবহার করে, যা ডেটাবেস টেবিলের উপর ভিত্তি করে ফর্ম তৈরি করতে পারে এবং ইনপুট ভ্যালিডেশন ও প্রসেসিং করার জন্য সহজ উপায় সরবরাহ করে। এখানে Forms এবং Validation এর ব্যবহারের নিয়ম এবং প্রক্রিয়া ব্যাখ্যা করা হলো।
Web2Py তে Forms এবং Validation
১. Forms তৈরি করা (Creating Forms)
Web2Py তে ফর্ম তৈরি করার জন্য মূলত SQLFORM ব্যবহার করা হয়। এটি ডেটাবেস টেবিলের উপর ভিত্তি করে ফর্ম তৈরি করতে পারে এবং সহজভাবে ডেটা প্রক্রিয়া করতে সহায়তা করে।
১.১ SQLFORM ব্যবহার করে ফর্ম তৈরি করা
SQLFORM ডেটাবেস টেবিলের উপর ভিত্তি করে ফর্ম তৈরি করে, যেখানে প্রতিটি ফর্ম ফিল্ড ডেটাবেসের একটি Field এর প্রতিনিধিত্ব করে।
- উদাহরণ: একটি সিম্পল বই যোগ করার ফর্ম তৈরি করা।
Controller (default.py):
def add_book():
form = SQLFORM(db.book) # db.book টেবিলের জন্য ফর্ম তৈরি
if form.process().accepted:
response.flash = 'Book Added Successfully!' # সফলভাবে ফর্ম সাবমিট হলে ফ্ল্যাশ মেসেজ
elif form.errors:
response.flash = 'Form has errors!' # যদি ফর্মে কোনো ভুল থাকে
return dict(form=form)
এখানে db.book হল ডেটাবেস টেবিল এবং SQLFORM(db.book) এর মাধ্যমে ফর্ম তৈরি করা হয়েছে।
View (default/add_book.html):
<h1>Add a New Book</h1>
{{=form}} <!-- ফর্মটি এখানে প্রদর্শিত হবে -->
এখানে ফর্মটি {{=form}} দিয়ে ভিউতে প্রদর্শিত হবে। ফর্মটি সাবমিট করলে, ডেটাবেসে বইয়ের তথ্য সেভ হয়ে যাবে।
২. Form Validation (ফর্ম ভ্যালিডেশন)
ফর্মে ইনপুট ভ্যালিডেশন করা খুবই গুরুত্বপূর্ণ, যাতে ইউজার সঠিক এবং নিরাপদ ডেটা প্রদান করে। Web2Py ফর্ম ভ্যালিডেশন সরাসরি SQLFORM এর মাধ্যমে হ্যান্ডেল করা যায়।
২.১ ইনপুট ভ্যালিডেশন
Web2Py তে প্রতিটি Field এর জন্য ভ্যালিডেশন করা যায়। Field গুলোর ভ্যালিডেশন ডিফাইন করা হয়, যেমন requires আর্গুমেন্টের মাধ্যমে।
উদাহরণ:
db.define_table('book',
Field('title', 'string', requires=IS_NOT_EMPTY()), # ফিল্ডে কোনো ইনপুট না দিলে এ্যারর হবে
Field('author', 'string', requires=IS_NOT_EMPTY()),
Field('price', 'double', requires=IS_FLOAT_IN_RANGE(0, 1000)) # প্রাইস 0 থেকে 1000 এর মধ্যে হতে হবে
)
এখানে:
IS_NOT_EMPTY()নিশ্চিত করে যে,titleএবংauthorফিল্ডগুলো খালি থাকবে না।IS_FLOAT_IN_RANGE(0, 1000)নিশ্চিত করে যে,priceফিল্ডের মান একটি বৈধ সংখ্যা হবে এবং 0 থেকে 1000 এর মধ্যে থাকবে।
২.২ ফর্ম প্রোসেসিং এবং ভ্যালিডেশন
ফর্ম সাবমিট হওয়ার পর, Web2Py স্বয়ংক্রিয়ভাবে ইনপুট যাচাই করে এবং যদি কোনো ত্রুটি থাকে, তা ফর্মের সাথে প্রদর্শন করে।
def add_book():
form = SQLFORM(db.book) # ফর্ম তৈরি
if form.process().accepted: # ফর্ম গ্রহণযোগ্য হলে
response.flash = 'Book Added Successfully!'
elif form.errors: # যদি কোনো ত্রুটি থাকে
response.flash = 'Form contains errors!'
return dict(form=form)
এখানে, form.process().accepted ফর্মটি গ্রহণযোগ্য হলে মেসেজ প্রদর্শন করে এবং form.errors এর মাধ্যমে ত্রুটিগুলি চিহ্নিত করা হয়।
৩. Custom Validation (কাস্টম ভ্যালিডেশন)
যদি আপনি কোনো নির্দিষ্ট ভ্যালিডেশন যুক্ত করতে চান, যা Web2Py তে ডিফল্টভাবে থাকে না, তবে আপনি কাস্টম ফাংশন ব্যবহার করতে পারেন।
উদাহরণ:
def custom_validation(field, value):
if len(value) < 5:
return 'Title must be at least 5 characters long.'
return None
db.define_table('book',
Field('title', 'string', requires=[IS_NOT_EMPTY(), custom_validation]),
Field('author', 'string', requires=IS_NOT_EMPTY())
)
এখানে custom_validation() ফাংশন তৈরি করা হয়েছে, যা নিশ্চিত করবে যে title ফিল্ডে অন্তত 5 ক্যারেক্টার থাকবে।
৪. ফর্মে ফাইল আপলোড
Web2Py তে ফর্মের মাধ্যমে ফাইল আপলোড করা খুবই সহজ। upload ফিল্ড ব্যবহার করে আপনি ইউজারের ফাইল আপলোড গ্রহণ করতে পারেন।
উদাহরণ:
db.define_table('profile',
Field('name', 'string'),
Field('photo', 'upload') # ফাইল আপলোড ফিল্ড
)
def upload_profile():
form = SQLFORM(db.profile)
if form.process().accepted:
response.flash = 'Profile updated!'
return dict(form=form)
এখানে, photo ফিল্ডটি ইউজারের ফাইল আপলোড গ্রহণ করবে এবং সেই ফাইলটি ডাটাবেসে সেভ হবে।
৫. ফর্ম ভ্যালিডেশন এবং কাস্টম এরর মেসেজ
Web2Py তে আপনি কাস্টম এরর মেসেজও তৈরি করতে পারেন, যা ইউজারের কাছে আরো স্পষ্টভাবে ত্রুটি জানাতে সহায়তা করে।
উদাহরণ:
db.define_table('book',
Field('title', 'string', requires=IS_NOT_EMPTY(error_message="Title cannot be empty")),
Field('price', 'double', requires=IS_FLOAT_IN_RANGE(0, 1000, error_message="Price must be between 0 and 1000"))
)
এখানে, IS_NOT_EMPTY() এবং IS_FLOAT_IN_RANGE() এর কাস্টম এরর মেসেজ প্রদান করা হয়েছে, যা ইউজারের সামনে দেখানো হবে।
সারাংশ
Web2Py তে Forms এবং Validation একটি অত্যন্ত গুরুত্বপূর্ণ এবং শক্তিশালী ফিচার যা ডেভেলপারদের সহজে ডেটা গ্রহণ এবং যাচাই করতে সহায়তা করে।
SQLFORMব্যবহার করে আপনি ডেটাবেস টেবিলের উপর ভিত্তি করে ফর্ম তৈরি করতে পারেন।- ভ্যালিডেশন: Web2Py তে ডিফল্টভাবে বিভিন্ন ধরনের ভ্যালিডেশন রয়েছে, যেমন
IS_NOT_EMPTY(),IS_FLOAT_IN_RANGE()ইত্যাদি। এছাড়া আপনি কাস্টম ভ্যালিডেশন ফাংশনও ব্যবহার করতে পারেন। - কাস্টম এরর মেসেজ: আপনি ইউজারের জন্য কাস্টম এরর মেসেজও নির্ধারণ করতে পারেন।
- ফাইল আপলোড: Web2Py তে সহজেই ফাইল আপলোড ফর্ম তৈরি করা সম্ভব।
এই সব বৈশিষ্ট্য Web2Py তে ফর্ম এবং ভ্যালিডেশনকে খুব শক্তিশালী এবং ব্যবহারবান্ধব করে তোলে।
Web2Py তে Forms তৈরি করা খুবই সহজ এবং কার্যকরী। ফর্মগুলি ওয়েব অ্যাপ্লিকেশনগুলিতে ইউজারের ইনপুট গ্রহণ করতে ব্যবহৃত হয় এবং Web2Py এই ইনপুটের ভ্যালিডেশন, প্রক্রিয়াকরণ, এবং সংরক্ষণ করতেও সাহায্য করে। Web2Py তে ফর্ম তৈরির জন্য একটি বিশেষ ফিচার SQLFORM ব্যবহার করা হয়, যা ফর্ম তৈরি, ভ্যালিডেশন এবং ডেটা প্রক্রিয়া করার কাজ করে।
এখানে Web2Py তে ফর্ম তৈরি এবং ফর্ম এলিমেন্টস ব্যবহার করার পদ্ধতি বিস্তারিতভাবে আলোচনা করা হলো।
Web2Py তে Forms তৈরি
১. ফর্ম তৈরি করতে SQLFORM ব্যবহার করা
Web2Py তে ফর্ম তৈরি করতে সাধারণত SQLFORM ক্লাস ব্যবহার করা হয়। এটি ডাটাবেসের টেবিলের সাথে সংযুক্ত ফর্ম তৈরি করে এবং স্বয়ংক্রিয়ভাবে ভ্যালিডেশন এবং প্রক্রিয়াকরণ করে।
উদাহরণ ১: একটি সিম্পল ফর্ম তৈরি করা।
ধরা যাক, আপনি একটি বইয়ের নাম ইনপুট নিতে চান।
controllers/default.py:
def add_book():
form = SQLFORM.factory(
Field('title', 'string', label='Book Title'),
Field('author', 'string', label='Author')
)
if form.process().accepted:
response.flash = 'Book Added Successfully!'
elif form.errors:
response.flash = 'There was an error in the form.'
return dict(form=form)
এখানে:
Field: ফর্ম এলিমেন্ট তৈরি করতে ব্যবহৃত হয়। আমরা দুটি ফিল্ড তৈরি করেছি:titleএবংauthor।form.process(): ফর্মটি প্রক্রিয়া এবং ভ্যালিডেশন করে। যদি ফর্মটি সফলভাবে সাবমিট হয়, তবেacceptedব্যাকগ্রাউন্ডেTrueহবে, অন্যথায়errorsব্যাকগ্রাউন্ডে থাকবে।
views/default/add_book.html:
<h2>Add a New Book</h2>
{{=form}}
এখানে, {{=form}} সিনট্যাক্সটি ফর্মটিকে ভিউতে রেন্ডার করবে।
২. ফর্ম এলিমেন্টস ব্যবহার
Web2Py তে বিভিন্ন ধরনের ফর্ম এলিমেন্টস ব্যবহার করা যায়, যা ইউজারের ইনপুট নেওয়ার জন্য বিভিন্ন ফিল্ড প্রদান করে।
ফর্ম এলিমেন্টস এর উদাহরণ:
Text Field:
Field('title', 'string', label='Book Title')Text Area: যদি আপনি বড় টেক্সট ইনপুট চান:
Field('description', 'text', label='Description')Integer Field: যদি আপনি ইনপুট হিসেবে পূর্ণসংখ্যা চান:
Field('price', 'integer', label='Price')Date Field: তারিখ ইনপুট নেয়ার জন্য:
Field('publish_date', 'date', label='Publish Date')Select (Drop-down) Field: ব্যবহারকারীকে কিছু অপশন থেকে নির্বাচন করার জন্য:
Field('genre', 'string', requires=IS_IN_SET(['Fiction', 'Non-fiction', 'Sci-fi', 'Romance']))Boolean Field (Checkbox): যদি আপনি কোন নির্দিষ্ট ভ্যালু চেকবক্সের মাধ্যমে নিতে চান:
Field('is_available', 'boolean', label='Is Available')File Field: ফাইল আপলোড করার জন্য:
Field('cover_image', 'upload', label='Cover Image')Password Field: ব্যবহারকারী পাসওয়ার্ড ইনপুট করলে:
Field('password', 'password', label='Password')
৩. ফর্ম ভ্যালিডেশন
Web2Py তে ফর্ম ভ্যালিডেশন স্বয়ংক্রিয়ভাবে করা হয়, তবে আপনি নিজেও কিছু ভ্যালিডেশন কাস্টমাইজ করতে পারেন। requires প্যারামিটার ব্যবহার করে আপনি ফর্ম ফিল্ডের জন্য বিভিন্ন ভ্যালিডেশন যুক্ত করতে পারেন।
উদাহরণ ১: একটি সিম্পল ভ্যালিডেশন ব্যবহার করা।
def add_book():
form = SQLFORM.factory(
Field('title', 'string', requires=IS_NOT_EMPTY(), label='Book Title'),
Field('author', 'string', requires=IS_NOT_EMPTY(), label='Author')
)
if form.process().accepted:
response.flash = 'Book Added Successfully!'
elif form.errors:
response.flash = 'There was an error in the form.'
return dict(form=form)
এখানে, IS_NOT_EMPTY() ভ্যালিডেশনটি নিশ্চিত করে যে ফর্ম ফিল্ডগুলো খালি থাকবে না।
উদাহরণ ২: ইমেইল ভ্যালিডেশন:
Field('email', 'string', requires=IS_EMAIL(), label='Email Address')
এখানে, IS_EMAIL() ভ্যালিডেশন নিশ্চিত করবে যে ব্যবহারকারী সঠিকভাবে একটি ইমেইল ঠিকানা প্রদান করছে।
৪. ফর্মের সাথে পুশ ডেটা
Web2Py তে আপনি ফর্মের সাথে ডেটা পুশ করতে পারেন। উদাহরণস্বরূপ, আপনি যদি ডাটাবেস থেকে কিছু প্রি-পপুলেটেড ডেটা দেখাতে চান, তবে আপনি সেটি ফর্মের মাধ্যমে করতে পারবেন।
উদাহরণ ১: ডাটাবেস থেকে প্রি-পপুলেটেড ডেটা ব্যবহার করা।
def add_book():
genres = db().select(db.genre.name) # ডাটাবেস থেকে genres নিয়ে আসা
form = SQLFORM.factory(
Field('title', 'string', label='Book Title'),
Field('genre', 'string', requires=IS_IN_SET([g.name for g in genres]), label='Genre')
)
if form.process().accepted:
response.flash = 'Book Added Successfully!'
return dict(form=form)
এখানে, IS_IN_SET ব্যবহার করে ডাটাবেস থেকে প্রাপ্ত genres নামের তালিকা ব্যবহারকারীকে পছন্দ করতে দেওয়া হয়েছে।
৫. ফর্ম সাবমিট এবং রিডিরেকশন
Web2Py তে ফর্ম সাবমিট হওয়ার পর আপনি ব্যবহারকারীকে অন্য পেজে রিডিরেক্ট করতে পারেন।
উদাহরণ:
def add_book():
form = SQLFORM(db.book)
if form.process().accepted:
redirect(URL('index')) # সফল সাবমিট হলে ইন্ডেক্স পেজে রিডিরেক্ট
return dict(form=form)
এখানে, redirect(URL('index')) ফাংশনটি সফল সাবমিট হলে ব্যবহারকারীকে index() অ্যাকশনের পেজে রিডিরেক্ট করে।
সারাংশ
Web2Py তে Forms তৈরি করা এবং ফর্ম এলিমেন্টস ব্যবহার করা খুবই সহজ। SQLFORM ব্যবহার করে আপনি ডাটাবেস সংযুক্ত ফর্ম তৈরি করতে পারেন, যেখানে ফিল্ড ভ্যালিডেশন, ফাইল আপলোড, প্রি-পপুলেটেড ডেটা, এবং অন্যান্য ফিচার সহজেই যোগ করা যায়। Web2Py তে ফর্ম এলিমেন্টস যেমন টেক্সট ফিল্ড, সিলেক্ট বক্স, চেকবক্স, পাসওয়ার্ড ফিল্ড ইত্যাদি ব্যবহার করে আপনি ইউজারের ইনপুট নিতে পারেন এবং ফর্ম প্রক্রিয়া ও ভ্যালিডেশন করতে পারেন।
Web2Py তে Data Validation এবং Error Handling অত্যন্ত গুরুত্বপূর্ণ দুটি ফিচার, যা অ্যাপ্লিকেশনের নির্ভরযোগ্যতা এবং ইউজার এক্সপেরিয়েন্স উন্নত করতে সাহায্য করে। Data Validation ব্যবহারকারীর ইনপুট যাচাই করতে সাহায্য করে এবং Error Handling অ্যাপ্লিকেশন চলাকালীন সময়ে যে কোনো ভুল বা সমস্যা পরিচালনা করতে ব্যবহৃত হয়।
এখানে Web2Py তে Data Validation এবং Error Handling ব্যবহারের বিভিন্ন পদ্ধতি ব্যাখ্যা করা হলো।
Data Validation in Web2Py
Web2Py তে ডেটা ভ্যালিডেশন নিশ্চিত করতে Field এবং SQLFORM ব্যবহার করা হয়। Field হল ডাটাবেস টেবিলের ফিল্ড এবং SQLFORM হল একটি ফর্ম যা ইউজারের ইনপুট গ্রহণ করে এবং তা ভ্যালিডেশন করে।
১. Field Validation
Web2Py ডাটাবেস ফিল্ডের জন্য ভ্যালিডেশন নির্ধারণ করতে বিভিন্ন বিল্ট-ইন ফাংশন সরবরাহ করে। উদাহরণস্বরূপ, আপনি Field অবজেক্টে ভ্যালিডেশন শর্ত সংযুক্ত করতে পারেন যেমন টাইপ, দৈর্ঘ্য, এবং নিয়মিত অভিব্যক্তি (Regex)।
# models/db.py
db.define_table('person',
Field('name', 'string', requires=IS_NOT_EMPTY()),
Field('email', 'string', requires=[IS_EMAIL(), IS_NOT_EMPTY()]),
Field('age', 'integer', requires=IS_INT_IN_RANGE(18, 100))
)
এখানে:
- IS_NOT_EMPTY(): নিশ্চিত করে যে ফিল্ডটি খালি নয়।
- IS_EMAIL(): ইমেইল ঠিকানা যাচাই করে।
- IS_INT_IN_RANGE(18, 100): নিশ্চিত করে যে বয়স ১৮ থেকে ১০০ এর মধ্যে থাকবে।
২. SQLFORM Validation
Web2Py তে আপনি SQLFORM ব্যবহার করে ফর্ম তৈরি করতে পারেন এবং সেগুলির জন্য ভ্যালিডেশন করতে পারেন। উদাহরণস্বরূপ:
# controllers/default.py
def register():
form = SQLFORM(db.person)
if form.process().accepted:
response.flash = 'Registration successful'
elif form.errors:
response.flash = 'Please fix the errors'
return dict(form=form)
এখানে, SQLFORM ফর্মটি স্বয়ংক্রিয়ভাবে db.person টেবিলের ফিল্ডের জন্য নির্ধারিত ভ্যালিডেশন চেক করবে। যদি ফর্মটি সফলভাবে প্রক্রিয়া হয়, তবে একটি ফ্ল্যাশ মেসেজ দেখানো হবে এবং যদি ত্রুটি থাকে, তবে ব্যবহারকারীকে সেগুলি সংশোধন করতে বলা হবে।
৩. Custom Validation
আপনি কাস্টম ভ্যালিডেশনও তৈরি করতে পারেন, যেখানে আপনি নিজের নির্দিষ্ট শর্ত যোগ করতে পারেন। যেমন:
# controllers/default.py
def custom_validation():
form = SQLFORM.factory(
Field('username', 'string'),
Field('password', 'password')
)
def password_strength(value):
if len(value) < 8:
return 'Password must be at least 8 characters long'
return None
form.vars.password.requires.append(password_strength)
if form.process().accepted:
response.flash = 'Form Accepted'
return dict(form=form)
এখানে, একটি কাস্টম ফাংশন password_strength তৈরি করা হয়েছে, যা পাসওয়ার্ডের দৈর্ঘ্য যাচাই করে।
Error Handling in Web2Py
Web2Py তে Error Handling সহজভাবে করা যায়, এবং এটি অ্যাপ্লিকেশনের যেকোনো ত্রুটি বা সমস্যার জন্য সমাধান প্রদান করে। এখানে কিছু সাধারণ Error Handling পদ্ধতি দেওয়া হলো:
১. Try-Except ব্লক
Python এর মতোই, Web2Py তে try-except ব্লক ব্যবহার করে কোডের ত্রুটি আটকানো এবং সেগুলির উপযুক্ত সমাধান করা যায়।
# controllers/default.py
def process_data():
try:
# কিছু কোড যেখানে ত্রুটি হতে পারে
result = 10 / 0 # এই লাইনটি ZeroDivisionError তৈরি করবে
except ZeroDivisionError as e:
response.flash = "Cannot divide by zero!"
return dict(error=e)
except Exception as e:
response.flash = "An unexpected error occurred!"
return dict(error=e)
return dict(result=result)
এখানে, ZeroDivisionError এর জন্য একটি কাস্টম বার্তা দেখানো হচ্ছে, এবং অন্য যে কোনো অপ্রত্যাশিত ত্রুটির জন্য একটি সাধারণ বার্তা দেখানো হচ্ছে।
২. HTTP 404 এবং 500 Error Handling
Web2Py তে যদি কোনো পেজ পাওয়া না যায় (404 Error) অথবা অ্যাপ্লিকেশন ক্র্যাশ করে (500 Error), আপনি কাস্টম পেজ তৈরি করতে পারেন যা ব্যবহারকারীকে বুঝিয়ে দেবে কী সমস্যা হয়েছে।
# controllers/default.py
def custom_404():
response.status = 404
return "Page not found!"
def custom_500():
response.status = 500
return "Internal Server Error!"
আপনি এই ফাংশনগুলোকে routes.py ফাইলে রাউট করে HTTP 404 এবং 500 ত্রুটির জন্য কাস্টম পেজ প্রদর্শন করতে পারেন।
৩. Flash Messages
Web2Py তে response.flash ব্যবহার করে আপনি ত্রুটির বার্তা বা তথ্য বার্তা ইউজারকে দেখাতে পারেন। এটি খুবই সহায়ক যখন ফর্ম ভ্যালিডেশন বা কোনো অন্যান্য কাজের জন্য ত্রুটি হয়।
# controllers/default.py
def login():
form = SQLFORM.factory(
Field('username'),
Field('password', 'password')
)
if form.process().accepted:
response.flash = 'Login successful'
elif form.errors:
response.flash = 'Please correct the errors'
return dict(form=form)
এখানে, response.flash ব্যবহার করে ইউজারকে ফর্মের অবস্থা জানানো হচ্ছে।
সারাংশ
Web2Py তে Data Validation এবং Error Handling এর মাধ্যমে আপনি অ্যাপ্লিকেশনের সঠিকতা নিশ্চিত করতে পারেন এবং ইউজারের ভালো অভিজ্ঞতা প্রদান করতে পারেন।
- Data Validation: ব্যবহারকারীর ইনপুট যাচাই করতে
Field,SQLFORMএবং কাস্টম ভ্যালিডেশন ব্যবহার করা হয়। - Error Handling:
try-exceptব্লক, HTTP ত্রুটি (404, 500) কাস্টম পেজ এবংresponse.flashবার্তা ব্যবহারের মাধ্যমে ত্রুটির সঠিক সমাধান প্রদান করা হয়।
এ দুটি বৈশিষ্ট্য অ্যাপ্লিকেশনের গুণমান বাড়ায় এবং ইউজার ইন্টারফেসে একটি পেশাদার অভিজ্ঞতা তৈরি করে।
Web2Py তে Custom Validators তৈরি করা একটি গুরুত্বপূর্ণ ফিচার, যা ডেভেলপারদের তাদের নিজস্ব ভ্যালিডেশন লজিক প্রয়োগ করার সুযোগ দেয়। সাধারণত, Web2Py ডিফল্ট ভ্যালিডেটর ব্যবহার করে ফর্ম ডেটা চেক করা হয়, তবে কখনও কখনও ডেভেলপারদের নিজস্ব ভ্যালিডেশন প্রয়োজন হতে পারে, যেমন বিশেষ ধরণের ডেটা ফরম্যাট বা শর্ত পূরণ করা।
এই ভ্যালিডেটরগুলি SQLFORM ফর্ম এবং ডাটাবেস ফিল্ডের জন্য ব্যবহৃত হয়। এখানে আমরা দেখব কিভাবে Web2Py তে কাস্টম ভ্যালিডেটর তৈরি করা যায় এবং তা ফর্ম এবং ডাটাবেস ফিল্ডে প্রয়োগ করা যায়।
Web2Py তে Custom Validators তৈরি করার প্রক্রিয়া
১. Custom Validator এর সাধারণ ধারণা
Web2Py তে একটি কাস্টম ভ্যালিডেটর হল একটি ফাংশন যা ইউজারের ইনপুট ভ্যালিডেট করে। যদি ইনপুটটি সঠিক না হয়, তবে ভ্যালিডেটর একটি এরর বার্তা ফেরত দেয়। আপনি যে কোন শর্তে ভ্যালিডেশন প্রয়োগ করতে পারেন, যেমন ইমেইল ফরম্যাট চেক করা, বিশেষ কিছু কিপ্টো ব্যবহার করা, ডেটা ফরম্যাট যাচাই করা ইত্যাদি।
২. Custom Validator তৈরি করা
Custom Validator ফাংশন লেখা: আপনি একটি সাধারণ Python ফাংশন তৈরি করবেন যা ইনপুট চেক করবে এবং এরর বার্তা ফেরত দেবে যদি ইনপুট সঠিক না হয়।
উদাহরণ:
# custom_validator.py def check_positive(value): if value <= 0: raise ValueError("The value must be a positive number.") return valueএখানে
check_positive()ফাংশনটি নিশ্চিত করে যে, ইনপুট সংখ্যা ০ এর চেয়ে বড় হতে হবে। যদি না হয়, তবে এটি একটি এরর বার্তা ফেরত দেয়।Custom Validator ফাংশন ব্যবহার করা: আপনি এই কাস্টম ভ্যালিডেটর ফাংশনটি Web2Py এর ফর্মে ব্যবহার করতে পারেন। ধরুন, আপনি একটি ফর্ম তৈরি করেছেন যেখানে ইউজারকে একটি পজিটিভ নম্বর প্রদান করতে বলা হচ্ছে।
# controllers/default.py def form_example(): form = SQLFORM.factory( Field('amount', 'integer', requires=check_positive) # Custom validator applied ) if form.process().accepted: response.flash = 'Form accepted!' elif form.errors: response.flash = 'Form has errors.' return dict(form=form)এখানে,
Field('amount', 'integer', requires=check_positive)অংশে আমরাcheck_positiveকাস্টম ভ্যালিডেটর যুক্ত করেছি। এই ফর্মে যে কেউ ০ বা তার কম সংখ্যা দিলে, তাতে এরর বার্তা দেখানো হবে।
৩. ফর্মে কাস্টম ভ্যালিডেটর যুক্ত করা
Web2Py তে ফর্মে কাস্টম ভ্যালিডেটর যোগ করার জন্য আপনি requires প্যারামিটার ব্যবহার করেন। কাস্টম ভ্যালিডেটরের মাধ্যমে আপনি যে কোন ধরণের শর্ত বা কনস্ট্রেনট প্রয়োগ করতে পারেন।
উদাহরণ:
def form_example():
form = SQLFORM.factory(
Field('email', 'string', requires=IS_EMAIL(error_message="Invalid email address.")),
Field('age', 'integer', requires=[IS_INT_IN_RANGE(18, 100), check_positive])
)
if form.process().accepted:
response.flash = 'Form accepted!'
elif form.errors:
response.flash = 'Form has errors.'
return dict(form=form)
এখানে দুটি ভ্যালিডেশন ব্যবহার করা হয়েছে:
IS_EMAIL: ইমেইল ঠিকানা ভ্যালিডেশন।check_positive: পজিটিভ নম্বর ভ্যালিডেশন, যা আমরা উপরে তৈরি করেছি।
৪. বিভিন্ন ধরনের কাস্টম ভ্যালিডেটর
কাস্টম ভ্যালিডেটরগুলোর মধ্যে কিছু জনপ্রিয় ভ্যালিডেশন কেস হলো:
ইমেইল ফরম্যাট চেক:
def check_valid_email(value): if '@' not in value or '.' not in value: raise ValueError("Invalid email format.") return valueপাসওয়ার্ড স্ট্রং ভ্যালিডেশন:
def check_strong_password(value): if len(value) < 8: raise ValueError("Password must be at least 8 characters long.") return valueঅফিসিয়াল ডেটা ফরম্যাট চেক:
def check_date_format(value): try: datetime.datetime.strptime(value, '%Y-%m-%d') except ValueError: raise ValueError("Incorrect date format, should be YYYY-MM-DD.") return value
সারাংশ
Web2Py তে কাস্টম ভ্যালিডেটর তৈরি করা একটি খুবই গুরুত্বপূর্ণ এবং সহজ প্রক্রিয়া। আপনি যেকোনো ধরনের ভ্যালিডেশন প্রয়োগ করতে পারেন, যেমন পজিটিভ নম্বর চেক, ইমেইল ফরম্যাট চেক, স্ট্রং পাসওয়ার্ড চেক ইত্যাদি। কাস্টম ভ্যালিডেটর ফাংশন তৈরি করে তা requires প্যারামিটার দিয়ে SQLFORM ফর্মে যুক্ত করা যায়, যা ডেভেলপারদের তাদের অ্যাপ্লিকেশনের জন্য নির্দিষ্ট ভ্যালিডেশন কাস্টমাইজ করতে সহায়তা করে।
Web2Py তে Form Submission এবং Data Handling খুবই গুরুত্বপূর্ণ ফিচার, যা ব্যবহারকারীদের ইনপুট নেওয়া এবং সেই ইনপুটের উপর ভিত্তি করে ডেটা প্রক্রিয়া করতে সাহায্য করে। Web2Py তে ফর্ম তৈরি, ভ্যালিডেশন, এবং ডেটাবেসে ডেটা সন্নিবেশ করার প্রক্রিয়া খুবই সহজ এবং দ্রুত। এই প্রক্রিয়ায় Web2Py স্বয়ংক্রিয়ভাবে ডেটা প্রক্রিয়া এবং ফর্ম ভ্যালিডেশন পরিচালনা করে।
এখানে Form Submission এবং Data Handling এর মূল ধারণা এবং উদাহরণ দিয়ে ব্যাখ্যা করা হলো।
Web2Py তে Form Submission এবং Data Handling
১. SQLFORM ব্যবহার করা
Web2Py তে ফর্ম তৈরি করতে SQLFORM ব্যবহার করা হয়, যা ডাটাবেস টেবিলের সাথে যুক্ত একটি ফর্ম তৈরি করে। আপনি যে কোনো ডেটা ইনপুট ফিল্ড তৈরি করতে পারেন এবং তা ডাটাবেসে সংরক্ষণ করতে পারেন।
SQLFORM এর মাধ্যমে ফর্ম তৈরি করা খুবই সহজ এবং এতে বিল্ট-ইন ভ্যালিডেশন রয়েছে, যা ডেটা সঠিকভাবে প্রক্রিয়া করতে সহায়তা করে।
ফর্ম তৈরি করা
ধরা যাক, আপনি একটি বই যোগ করার ফর্ম তৈরি করতে চান, যাতে বইয়ের নাম, লেখক এবং প্রকাশের তারিখ ইনপুট নেওয়া হবে।
# controllers/default.py
def add_book():
form = SQLFORM.factory(
Field('title', 'string', requires=IS_NOT_EMPTY()), # বইয়ের নাম (যা ফাঁকা থাকতে পারবে না)
Field('author', 'string', requires=IS_NOT_EMPTY()), # লেখক (যা ফাঁকা থাকতে পারবে না)
Field('published_date', 'date', requires=IS_DATE()), # প্রকাশের তারিখ (ডেট ফরম্যাটে)
Field('price', 'float', requires=IS_FLOAT_IN_RANGE(0, 1000)) # মূল্য (0 থেকে 1000)
)
if form.process().accepted:
response.flash = 'Book added successfully!' # ফর্ম সফলভাবে সাবমিট হলে মেসেজ দেখাবে
elif form.errors:
response.flash = 'Please correct the errors!' # যদি কোনো ত্রুটি থাকে
return dict(form=form)
এখানে, SQLFORM.factory ব্যবহার করে একটি ফর্ম তৈরি করা হয়েছে, যেখানে বইয়ের নাম, লেখক, প্রকাশের তারিখ এবং মূল্য ইনপুট হিসেবে নেওয়া হবে। এই ফর্মে requires ফিল্ডটি ইনপুটের জন্য ভ্যালিডেশন যুক্ত করে।
২. ফর্ম ভ্যালিডেশন
Web2Py তে ফর্মের ইনপুটের জন্য ভ্যালিডেশন খুবই সহজ। আপনি requires প্যারামিটার ব্যবহার করে ইনপুট ভ্যালিডেশন করতে পারেন। উদাহরণস্বরূপ:
- IS_NOT_EMPTY(): ইনপুট ফিল্ডটি ফাঁকা থাকতে পারবে না।
- IS_DATE(): ইনপুট ফিল্ডটি সঠিক ডেট ফরম্যাটে হতে হবে।
- IS_FLOAT_IN_RANGE(): ইনপুট ফিল্ডটি নির্দিষ্ট রেঞ্জের মধ্যে থাকতে হবে (যেমন 0 থেকে 1000)।
এই ভ্যালিডেশনগুলো স্বয়ংক্রিয়ভাবে ফর্ম প্রক্রিয়া করার সময় কার্যকর হবে।
৩. ফর্ম সাবমিশন এবং ডেটাবেসে সন্নিবেশ
ফর্মটি সফলভাবে পূর্ণ হলে এবং সকল ভ্যালিডেশন পাস হলে, আপনি ডেটাবেসে ডেটা সন্নিবেশ করতে পারেন। উদাহরণস্বরূপ:
def add_book():
form = SQLFORM.factory(
Field('title', 'string', requires=IS_NOT_EMPTY()),
Field('author', 'string', requires=IS_NOT_EMPTY()),
Field('published_date', 'date', requires=IS_DATE()),
Field('price', 'float', requires=IS_FLOAT_IN_RANGE(0, 1000))
)
if form.process().accepted:
# ফর্ম সাবমিশন সফল হলে ডেটাবেসে ডেটা সন্নিবেশ
db.book.insert(
title=form.vars.title,
author=form.vars.author,
published_date=form.vars.published_date,
price=form.vars.price
)
response.flash = 'Book added successfully!'
elif form.errors:
response.flash = 'Please correct the errors!'
return dict(form=form)
এখানে, form.process().accepted দ্বারা চেক করা হয় যে ফর্মটি সফলভাবে সাবমিট হয়েছে কিনা এবং সমস্ত ভ্যালিডেশন পাস করেছে কিনা। এরপর db.book.insert ফাংশন ব্যবহার করে ফর্মের ডেটা ডেটাবেসে সন্নিবেশ করা হয়।
৪. ফর্মের বিভিন্ন অবস্থা (State)
ফর্মের বিভিন্ন অবস্থা চেক করার জন্য আপনি form.process() ব্যবহার করতে পারেন:
- form.accepted: ফর্ম সফলভাবে সাবমিট হয়েছে।
- form.errors: ফর্মে কোনো ত্রুটি রয়েছে।
- form.vars: ফর্মের ইনপুট ডেটা (যেমন বইয়ের নাম, লেখক)।
৫. ফর্ম ভিউ (Form View)
ফর্মটি দেখানোর জন্য, আপনি ভিউ ফাইল ব্যবহার করতে পারেন। উদাহরণস্বরূপ:
<!-- views/default/add_book.html -->
<h1>Add a New Book</h1>
{{=form}} <!-- ফর্মটি এখানে রেন্ডার করা হবে -->
এটি add_book() ফাংশনের সাথে যুক্ত ভিউ, যেখানে ফর্মটি প্রদর্শন করা হবে।
৬. ডেটা আপডেট এবং ডিলিট
Web2Py তে ফর্ম ব্যবহার করে ডেটা আপডেট এবং ডিলিটও করা যায়। উদাহরণস্বরূপ:
ডেটা আপডেট:
def edit_book(): book_id = request.args(0, cast=int) book = db.book(book_id) or redirect(URL('index')) form = SQLFORM(db.book, book) if form.process().accepted: response.flash = 'Book updated successfully!' return dict(form=form)ডেটা ডিলিট:
def delete_book(): book_id = request.args(0, cast=int) db(db.book.id == book_id).delete() redirect(URL('index'))
এখানে, edit_book() ফাংশন একটি বই আপডেট করবে এবং delete_book() ফাংশন একটি বই মুছে ফেলবে।
সারাংশ
Web2Py তে Form Submission এবং Data Handling সহজ এবং কার্যকর। SQLFORM ব্যবহার করে আপনি খুব সহজে ফর্ম তৈরি করতে পারেন, যা ডেটাবেসের সাথে সংযুক্ত এবং ইনপুট ভ্যালিডেশন ও ডেটা সন্নিবেশ পরিচালনা করে। আপনি ফর্মের মাধ্যমে ডেটা সংগ্রহ, আপডেট এবং ডিলিট করতে পারেন, এবং Web2Py স্বয়ংক্রিয়ভাবে এই প্রক্রিয়াগুলি সহজ এবং দ্রুত করে তোলে।
Read more