CherryPy ওয়েব অ্যাপ্লিকেশন ডেভেলপ করার জন্য একটি শক্তিশালী এবং নমনীয় ফ্রেমওয়ার্ক। ফর্ম হ্যান্ডলিং এবং ডেটা ভ্যালিডেশন অত্যন্ত গুরুত্বপূর্ণ একটি অংশ, বিশেষত যখন আপনি ইউজার ইনপুট গ্রহণ করেন। CherryPy দিয়ে ফর্ম ডেটা গ্রহণ এবং সেগুলির ভ্যালিডেশন পরিচালনা করা সহজ।
CherryPy তে ফর্ম হ্যান্ডলিং
CherryPy তে ফর্ম হ্যান্ডলিংয়ের জন্য ইউজারদের থেকে ইনপুট সংগ্রহ করতে HTTP POST রিকোয়েস্ট ব্যবহার করা হয়। ফর্ম ডেটা সংগ্রহ করার জন্য CherryPy cherrypy.request.params ব্যবহার করে।
উদাহরণ: একটি ফর্ম হ্যান্ডলিং
import cherrypy
class FormHandler:
@cherrypy.expose
def index(self):
return '''
<html>
<body>
<h2>ফর্মটি পূর্ণ করুন</h2>
<form method="POST" action="/submit_form">
নাম: <input type="text" name="name"><br><br>
ইমেইল: <input type="text" name="email"><br><br>
<input type="submit" value="সাবমিট">
</form>
</body>
</html>
'''
@cherrypy.expose
def submit_form(self, name, email):
return f"আপনার নাম: {name} <br>আপনার ইমেইল: {email}"
if __name__ == '__main__':
cherrypy.quickstart(FormHandler())
এখানে:
indexমেথডটি একটি HTML ফর্ম রেন্ডার করে যেখানে ইউজার নাম এবং ইমেইল ইনপুট করতে পারেন।submit_formমেথডটি ফর্ম সাবমিট হওয়ার পর ইউজারের ইনপুট ডেটা প্রদর্শন করে।
CherryPy তে Data Validation
ইউজারের ইনপুট ডেটা ভ্যালিডেশন একটি গুরুত্বপূর্ণ পদক্ষেপ, যেটি ইনপুটের সঠিকতা এবং নিরাপত্তা নিশ্চিত করে। CherryPy এর মাধ্যমে আপনি সিম্পল Python কোড বা বাইরের ভ্যালিডেশন লাইব্রেরি ব্যবহার করে ডেটা ভ্যালিডেশন করতে পারেন।
উদাহরণ: ফর্ম ভ্যালিডেশন
import cherrypy
import re
class FormHandler:
@cherrypy.expose
def index(self):
return '''
<html>
<body>
<h2>ফর্মটি পূর্ণ করুন</h2>
<form method="POST" action="/submit_form">
নাম: <input type="text" name="name"><br><br>
ইমেইল: <input type="text" name="email"><br><br>
<input type="submit" value="সাবমিট">
</form>
</body>
</html>
'''
@cherrypy.expose
def submit_form(self, name, email):
# ডেটা ভ্যালিডেশন
if not name or len(name) < 3:
return "নাম অবশ্যই ৩টি অক্ষরের বেশি হতে হবে।<br><br><a href='/'>ফর্মে ফিরে যান</a>"
email_regex = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
if not re.match(email_regex, email):
return "অবৈধ ইমেইল ঠিকানা।<br><br><a href='/'>ফর্মে ফিরে যান</a>"
return f"আপনার নাম: {name} <br>আপনার ইমেইল: {email}"
if __name__ == '__main__':
cherrypy.quickstart(FormHandler())
এখানে:
- নাম ভ্যালিডেশন: যদি নামের দৈর্ঘ্য ৩ চরিত্রের কম হয়, তাহলে একটি ত্রুটি বার্তা প্রদর্শিত হবে।
- ইমেইল ভ্যালিডেশন: একটি রেগুলার এক্সপ্রেশন ব্যবহার করে ইমেইল ঠিকানার বৈধতা পরীক্ষা করা হয়েছে।
CherryPy তে Advanced Form Handling
CherryPy তে আপনি আরও উন্নত ফর্ম হ্যান্ডলিংয়ের জন্য বিভিন্ন টুলস এবং লাইব্রেরি ব্যবহার করতে পারেন, যেমন:
- WTForms: ওয়েব ফর্ম তৈরির জন্য একটি শক্তিশালী লাইব্রেরি, যা ফর্ম ভ্যালিডেশন, ফর্ম ফিল্ড টাইপ, এবং অন্যান্য অনেক ফিচার সরবরাহ করে।
- CherryPy Tools: CherryPy নিজেই কিছু টুলস প্রদান করে, যা ফর্ম হ্যান্ডলিং এবং ভ্যালিডেশন প্রক্রিয়াকে সহজ করে।
CherryPy তে File Upload Handling
CherryPy তে ফাইল আপলোড হ্যান্ডলিংয়ের জন্য cherrypy.request.params থেকে ফাইল ডেটা পাওয়া যায়। ফাইল আপলোড করার সময় POST রিকোয়েস্ট ব্যবহার করা হয় এবং ফাইল সাইজ, টাইপ ইত্যাদি চেক করা হয়।
উদাহরণ: ফাইল আপলোড
import cherrypy
class FileUpload:
@cherrypy.expose
def index(self):
return '''
<html>
<body>
<h2>ফাইল আপলোড করুন</h2>
<form method="POST" action="/upload" enctype="multipart/form-data">
ফাইল: <input type="file" name="file"><br><br>
<input type="submit" value="আপলোড">
</form>
</body>
</html>
'''
@cherrypy.expose
def upload(self, file):
upload_path = './uploads/'
upload_file = open(upload_path + file.filename, 'wb')
upload_file.write(file.file.read())
upload_file.close()
return f"ফাইলটি সফলভাবে আপলোড করা হয়েছে: {file.filename}"
if __name__ == '__main__':
cherrypy.quickstart(FileUpload())
এখানে:
- ফাইল আপলোড করার জন্য
enctype="multipart/form-data"ফর্ম অ্যাট্রিবিউট ব্যবহার করা হয়েছে। - ফাইলটি
fileফিল্ড থেকে গ্রহণ করা হচ্ছে এবং সেটি একটি লোকাল ফোল্ডারে সেভ করা হচ্ছে।
CherryPy তে ফর্ম হ্যান্ডলিং এবং ডেটা ভ্যালিডেশন করা সহজ এবং কার্যকর। আপনি সরাসরি ইউজারের ইনপুট গ্রহণ করে সেটি প্রক্রিয়া করতে পারেন, এবং সেই ইনপুটগুলির বৈধতা পরীক্ষা করতে পারেন। এতে আপনার অ্যাপ্লিকেশন নিরাপদ, নির্ভরযোগ্য এবং ব্যবহারকারী-বান্ধব হয়।
CherryPy দিয়ে HTML ফর্ম তৈরি করা এবং তা সাবমিট করা একটি সাধারণ ওয়েব ডেভেলপমেন্ট প্রক্রিয়া। এই প্রক্রিয়ায়, আমরা HTML ফর্ম তৈরি করব এবং ফর্মটি সাবমিট হওয়ার পর চেরিপাইয়ের মাধ্যমে ডেটা গ্রহণ ও প্রক্রিয়া করব। CherryPy তে HTML ফর্ম ব্যবহারের মাধ্যমে ব্যবহারকারীর ইনপুট নেওয়া, ভ্যালিডেশন করা এবং রেসপন্স পাঠানো সহজ।
HTML ফর্ম তৈরি করা এবং সাবমিট করা
এই উদাহরণে, আমরা একটি সহজ HTML ফর্ম তৈরি করব যেখানে ব্যবহারকারী তার নাম ইনপুট দেবে এবং তারপর ফর্মটি সাবমিট করলে CherryPy তা গ্রহণ করে প্রদর্শন করবে।
১. CherryPy কোড
প্রথমে CherryPy অ্যাপ তৈরি করা হবে, যেখানে HTML ফর্মটি রেন্ডার করা হবে এবং সাবমিট হওয়ার পর ডেটা প্রসেস করা হবে।
উদাহরণ: CherryPy অ্যাপ্লিকেশন
import cherrypy
class FormApp:
@cherrypy.expose
def index(self):
return '''
<html>
<body>
<h2>ব্যবহারকারীর নাম প্রদান করুন</h2>
<form method="POST" action="/submit">
নাম: <input type="text" name="username" />
<input type="submit" value="সাবমিট করুন" />
</form>
</body>
</html>
'''
@cherrypy.expose
def submit(self, username):
# ফর্ম ডেটা প্রসেস করা হচ্ছে
return f'আপনার দেওয়া নাম: {username}'
if __name__ == '__main__':
cherrypy.quickstart(FormApp())
কোড ব্যাখ্যা:
indexমেথড:- এটি রুট
/পাথে উপস্থিত। এখানে HTML ফর্ম রেন্ডার করা হয়েছে। ফর্মটিPOSTমেথড ব্যবহার করে/submitপাথে ডেটা পাঠায়।
- এটি রুট
submitমেথড:- এই মেথডটি
/submitপাথে ফর্ম ডেটা গ্রহণ করে।usernameপ্যারামিটারটিPOSTরিকোয়েস্টের মাধ্যমে আসে এবং এটি সরাসরি ব্যবহারকারীকে দেখানো হয়।
- এই মেথডটি
- HTML ফর্ম:
- ফর্মে একটি ইনপুট ফিল্ড (text field) এবং একটি সাবমিট বাটন রয়েছে।
- ফর্মের
actionঅ্যাট্রিবিউটে/submitপাথ উল্লেখ করা হয়েছে, যা ফর্ম সাবমিট হলে ডেটা গ্রহণ করবে।
২. অ্যাপ্লিকেশন চালানো
এখন, এই কোডটি একটি ফাইলে যেমন app.py নাম দিয়ে সেভ করুন। তারপর টার্মিনালে গিয়ে কোডটি রান করুন:
python app.py
এরপর ব্রাউজারে যান এবং http://127.0.0.1:8080 এ অ্যাক্সেস করুন।
৩. ব্রাউজারে ফর্ম ব্যবহার করা
এখন ব্রাউজারে আপনি একটি ফর্ম দেখতে পাবেন। ফর্মে একটি নাম লিখে "সাবমিট করুন" বাটনে ক্লিক করলে আপনি নিচের মত একটি ফলাফল দেখতে পাবেন:
আপনার দেওয়া নাম: [আপনার নাম]
৪. ফর্ম ভ্যালিডেশন (এছাড়াও করা যেতে পারে)
CherryPy তে ফর্ম ভ্যালিডেশনও করা সম্ভব। উদাহরণস্বরূপ, ব্যবহারকারীর নাম শূন্য না থাকলে তবেই ফর্ম সাবমিট হবে।
উদাহরণ: ফর্ম ভ্যালিডেশন
import cherrypy
class FormApp:
@cherrypy.expose
def index(self):
return '''
<html>
<body>
<h2>ব্যবহারকারীর নাম প্রদান করুন</h2>
<form method="POST" action="/submit">
নাম: <input type="text" name="username" />
<input type="submit" value="সাবমিট করুন" />
</form>
</body>
</html>
'''
@cherrypy.expose
def submit(self, username):
# ফর্ম ভ্যালিডেশন
if not username:
return "নাম ফাঁকা রাখা যাবে না!"
return f'আপনার দেওয়া নাম: {username}'
if __name__ == '__main__':
cherrypy.quickstart(FormApp())
এতে, যদি ব্যবহারকারী নাম না লিখে ফর্ম সাবমিট করেন, তবে একটি ত্রুটি বার্তা "নাম ফাঁকা রাখা যাবে না!" প্রদর্শিত হবে।
CherryPy ব্যবহার করে HTML ফর্ম তৈরি এবং ডেটা সাবমিট করা খুবই সহজ। আপনি @cherrypy.expose ডেকোরেটর ব্যবহার করে ফর্ম পেজ তৈরি করতে পারেন এবং POST রিকোয়েস্টের মাধ্যমে ডেটা প্রক্রিয়া করতে পারেন। CherryPy তে ফর্ম ভ্যালিডেশন, ডেটা প্রসেসিং এবং রেসপন্স পাঠানো খুবই সহজ।
CherryPy তে ফর্ম ডেটা হ্যান্ডলিং এবং ভ্যালিডেশন করা বেশ সহজ। CherryPy ওয়েব অ্যাপ্লিকেশনগুলিতে ইউজার ইনপুট গ্রহণ করার জন্য ফর্ম ব্যবহার করা হয় এবং এই ইনপুটগুলো প্রক্রিয়াজাত করতে এবং সঠিকতা যাচাই (Validation) করার জন্য CherryPy বেশ কিছু টুলস এবং টেকনিক সরবরাহ করে।
ফর্ম ডেটা হ্যান্ডলিং (Form Data Handling)
CherryPy তে ফর্ম ডেটা হ্যান্ডলিং করতে cherrypy.request অবজেক্ট ব্যবহার করা হয়। ফর্ম থেকে ইনপুট পাঠানো হলে সেটি cherrypy.request.params এর মাধ্যমে অ্যাক্সেস করা যায়। এটি সাধারণত GET এবং POST রিকোয়েস্টের মাধ্যমে ডেটা গ্রহণ করতে ব্যবহৃত হয়।
উদাহরণ: ফর্ম ডেটা গ্রহণ
import cherrypy
class FormHandler:
@cherrypy.expose
def index(self):
return '''
<html>
<body>
<form method="post" action="/submit">
<label for="name">নাম:</label>
<input type="text" name="name" id="name"><br><br>
<label for="email">ইমেইল:</label>
<input type="text" name="email" id="email"><br><br>
<input type="submit" value="জমা দিন">
</form>
</body>
</html>
'''
@cherrypy.expose
def submit(self, name, email):
return f"আপনার নাম: {name}, ইমেইল: {email}"
if __name__ == '__main__':
cherrypy.quickstart(FormHandler())
এখানে, index মেথডটি একটি HTML ফর্ম তৈরি করে, যা submit মেথডে পাঠানো হয়। ব্যবহারকারী ফর্মে নাম এবং ইমেইল ইনপুট করবে এবং সাবমিট করার পর submit মেথডের মাধ্যমে ইনপুট ডেটা প্রক্রিয়াজাত করা হবে।
ফর্ম ডেটা ভ্যালিডেশন (Form Data Validation)
চেরিপাই ফর্ম ডেটা ভ্যালিডেশন করতে বেশ কিছু সহজ উপায় সরবরাহ করে, যার মাধ্যমে আপনি ইনপুট ডেটা সঠিক কিনা তা যাচাই করতে পারবেন।
উদাহরণ: ফর্ম ভ্যালিডেশন
import cherrypy
class FormHandler:
@cherrypy.expose
def index(self):
return '''
<html>
<body>
<form method="post" action="/submit">
<label for="name">নাম:</label>
<input type="text" name="name" id="name"><br><br>
<label for="email">ইমেইল:</label>
<input type="text" name="email" id="email"><br><br>
<input type="submit" value="জমা দিন">
</form>
</body>
</html>
'''
@cherrypy.expose
def submit(self, name, email):
# ফর্ম ডেটা ভ্যালিডেশন
if not name or not email:
return "নাম এবং ইমেইল ফিল্ডগুলি অবশ্যই পূর্ণ করতে হবে।"
if "@" not in email:
return "ইমেইল ঠিকমতো লিখুন।"
return f"আপনার নাম: {name}, ইমেইল: {email}"
if __name__ == '__main__':
cherrypy.quickstart(FormHandler())
এখানে, submit মেথডে ভ্যালিডেশন কোড যোগ করা হয়েছে:
- নাম এবং ইমেইল ফিল্ডগুলোর জন্য চেক করা হচ্ছে।
- ইমেইল ফিল্ডে "@" সিম্বল আছে কি না তা যাচাই করা হচ্ছে।
ফর্ম ডেটা সেশন ম্যানেজমেন্ট
CherryPy তে সেশন ব্যবহার করে ফর্ম ডেটা সাময়িকভাবে সংরক্ষণ করা যেতে পারে। এটি ব্যবহারকারীর ডেটা প্রক্রিয়া করার জন্য এবং পরবর্তীতে আবার ব্যবহার করার জন্য সুবিধাজনক।
উদাহরণ: সেশন ব্যবহার করে ফর্ম ডেটা সংরক্ষণ
import cherrypy
class FormHandler:
@cherrypy.expose
def index(self):
return '''
<html>
<body>
<form method="post" action="/submit">
<label for="name">নাম:</label>
<input type="text" name="name" id="name"><br><br>
<label for="email">ইমেইল:</label>
<input type="text" name="email" id="email"><br><br>
<input type="submit" value="জমা দিন">
</form>
</body>
</html>
'''
@cherrypy.expose
def submit(self, name, email):
cherrypy.session['name'] = name
cherrypy.session['email'] = email
return f"আপনার নাম: {name}, ইমেইল: {email}"
@cherrypy.expose
def show_session(self):
if 'name' in cherrypy.session:
return f"সেশন থেকে নাম: {cherrypy.session['name']}, ইমেইল: {cherrypy.session['email']}"
return "কোনও সেশন তথ্য পাওয়া যায়নি।"
if __name__ == '__main__':
cherrypy.config.update({'tools.sessions.on': True})
cherrypy.quickstart(FormHandler())
এখানে, submit মেথডে ইনপুট ডেটা সেশন ভেরিয়েবল হিসেবে সংরক্ষিত হচ্ছে এবং show_session মেথডে সেশন থেকে ডেটা দেখানো হচ্ছে।
ফর্ম ডেটা পরিস্কার এবং নিরাপত্তা
CherryPy তে ইনপুট ডেটা নিরাপদ রাখতে এবং পরিস্কার (sanitize) করতে কিছু কৌশল গ্রহণ করা হয়, যেমন:
- SQL Injection থেকে রক্ষা পেতে ডেটা স্যানিটাইজ করা।
- XSS (Cross-Site Scripting) আক্রমণ থেকে রক্ষা পেতে ইনপুটগুলো যাচাই করা।
উদাহরণ: ইনপুট স্যানিটাইজেশন
import cherrypy
import re
class FormHandler:
@cherrypy.expose
def index(self):
return '''
<html>
<body>
<form method="post" action="/submit">
<label for="name">নাম:</label>
<input type="text" name="name" id="name"><br><br>
<label for="email">ইমেইল:</label>
<input type="text" name="email" id="email"><br><br>
<input type="submit" value="জমা দিন">
</form>
</body>
</html>
'''
@cherrypy.expose
def submit(self, name, email):
# ইনপুট স্যানিটাইজেশন
name = re.sub(r'[^\w\s]', '', name) # নামের অপ্রয়োজনীয় চিহ্ন সরানো
email = re.sub(r'[^\w@.]', '', email) # ইমেইল থেকে অপ্রয়োজনীয় চিহ্ন সরানো
return f"আপনার নাম: {name}, ইমেইল: {email}"
if __name__ == '__main__':
cherrypy.quickstart(FormHandler())
এখানে, name এবং email ইনপুটে শুধুমাত্র নিরাপদ অক্ষর গ্রহণ করা হচ্ছে, অন্য কোন অপ্রয়োজনীয় চিহ্ন সরানো হচ্ছে।
CherryPy তে ফর্ম ডেটা হ্যান্ডলিং এবং ভ্যালিডেশন একটি গুরুত্বপূর্ণ অংশ। আপনি সহজেই ফর্ম থেকে ডেটা গ্রহণ করতে পারেন এবং বিভিন্ন ধরনের ভ্যালিডেশন করতে পারেন। CherryPy তে সেশন ব্যবহার করে ডেটা সংরক্ষণ করা এবং ইনপুট স্যানিটাইজেশন করা সম্ভব, যা সিকিউরিটি নিশ্চিত করে এবং অ্যাপ্লিকেশনকে আরও নিরাপদ করে তোলে।
CherryPy ওয়েব ফ্রেমওয়ার্কে validation একটি গুরুত্বপূর্ণ ভূমিকা পালন করে, বিশেষ করে যখন আপনি ইউজার ইনপুট গ্রহণ করেন এবং তা প্রক্রিয়া করার জন্য ওয়েব সার্ভারে পাঠান। CherryPy কিছু বিল্ট-ইন ভ্যালিডেশন সরবরাহ করে, তবে আপনি custom validators তৈরি করেও আপনার অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় ভ্যালিডেশন লজিক প্রয়োগ করতে পারেন।
Built-in Validation in CherryPy
CherryPy ওয়েব ফ্রেমওয়ার্কের মধ্যে কিছু সাধারণ বিল্ট-ইন ভ্যালিডেশন টুল রয়েছে, যা ইউজার ইনপুটের সঠিকতা নিশ্চিত করতে সাহায্য করে। CherryPy সাধারণত প্রসেসিং টুলস বা tools ব্যবহার করে ইনপুট ভ্যালিডেশন সম্পাদন করে।
উদাহরণ: CherryPy তে বিল্ট-ইন ভ্যালিডেশন ব্যবহার
CherryPy সরাসরি ইনপুট ভ্যালিডেশন প্রদান না করলেও, আপনি request এর জন্য সরাসরি ফিল্টারিং এবং টুলস ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি ফর্ম ইনপুটের জন্য integer, string ইত্যাদি চেক করতে পারেন।
import cherrypy
class FormValidatorApp:
@cherrypy.expose
def index(self, age=None):
if age:
try:
# ইনপুটের ভ্যালিডেশন
age = int(age)
if age < 18:
return "আপনার বয়স ১৮ বছরের কম।"
return f"আপনার বয়স {age} বছর।"
except ValueError:
return "দয়া করে একটি বৈধ বয়স প্রদান করুন।"
return '''
<form method="get">
আপনার বয়স: <input type="text" name="age" />
<input type="submit" value="জমা দিন" />
</form>
'''
if __name__ == '__main__':
cherrypy.quickstart(FormValidatorApp())
এখানে, age ইনপুটের জন্য একটি সিম্পল ভ্যালিডেশন করা হচ্ছে:
- যদি ইনপুটটি integer না হয়, তাহলে একটি ValueError ত্রুটি দেখানো হবে।
- যদি বয়স ১৮ বছরের কম হয়, তাহলে একটি মেসেজ দেখানো হবে।
Custom Validators
CherryPy তে Custom Validators তৈরি করা যায়, যাতে আপনি আরো কাস্টম ভ্যালিডেশন লজিক প্রয়োগ করতে পারেন। উদাহরণস্বরূপ, আপনি ইউজারের ইনপুটের জন্য কিছু নির্দিষ্ট শর্ত প্রয়োগ করতে পারেন, যেমন: ইমেইল ফরম্যাট, পাসওয়ার্ড শক্তি চেক, অথবা কাস্টম ফিল্ড লেংথ ভ্যালিডেশন।
Custom Validator উদাহরণ
ধরা যাক, আপনি একটি কাস্টম পাসওয়ার্ড ভ্যালিডেশন করতে চান, যা চেক করবে পাসওয়ার্ডটি কমপক্ষে ৮টি চরিত্রের এবং একটি বড় হাতের অক্ষর থাকতে হবে।
import cherrypy
import re
def password_validator(password):
if len(password) < 8:
return "পাসওয়ার্ডটি কমপক্ষে ৮টি অক্ষর হতে হবে।"
if not re.search(r'[A-Z]', password):
return "পাসওয়ার্ডে কমপক্ষে একটি বড় হাতের অক্ষর থাকতে হবে।"
return None
class RegistrationApp:
@cherrypy.expose
def index(self, password=None):
if password:
validation_error = password_validator(password)
if validation_error:
return f"ভুল পাসওয়ার্ড: {validation_error}"
return "পাসওয়ার্ড সঠিক।"
return '''
<form method="get">
পাসওয়ার্ড: <input type="password" name="password" />
<input type="submit" value="জমা দিন" />
</form>
'''
if __name__ == '__main__':
cherrypy.quickstart(RegistrationApp())
এখানে:
password_validatorএকটি কাস্টম ভ্যালিডেটর ফাংশন তৈরি করা হয়েছে, যা পাসওয়ার্ডের জন্য নির্দিষ্ট শর্ত যেমন লম্বা এবং একটি বড় হাতের অক্ষর থাকতে হবে, চেক করে।- যদি পাসওয়ার্ডের শর্ত পূর্ণ না হয়, তবে একটি ত্রুটি বার্তা প্রদর্শিত হবে।
Using CherryPy Tools for Validation
CherryPy তে আপনি নিজস্ব টুলসও তৈরি করতে পারেন যা ইনপুট ভ্যালিডেশন পরিচালনা করবে। CherryPy টুলস অনেক সময় স্ট্যাটিক ফাইল সার্ভিং, সেশন ম্যানেজমেন্ট বা ইউজার ইনপুট ভ্যালিডেশন করার জন্য ব্যবহৃত হয়।
উদাহরণ: Custom Validation Tool
import cherrypy
class CustomValidatorTool:
def __init__(self, valid_values=None):
self.valid_values = valid_values or []
def __call__(self, value):
if value not in self.valid_values:
raise cherrypy.HTTPError(400, "Invalid value provided.")
class MyApp:
valid_colors = ["red", "green", "blue"]
@cherrypy.expose
def index(self, color=None):
# Custom validation
if color:
validator = CustomValidatorTool(self.valid_colors)
validator(color)
return f"আপনি {color} রঙটি নির্বাচন করেছেন।"
return '''
<form method="get">
রঙ নির্বাচন করুন: <input type="text" name="color" />
<input type="submit" value="জমা দিন" />
</form>
'''
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে:
CustomValidatorToolএকটি কাস্টম টুল তৈরি করা হয়েছে, যা ইউজারের ইনপুট ভ্যালিডেশন করবে।- রঙের ইনপুট যদি red, green, বা blue এর মধ্যে না হয়, তাহলে একটি HTTPError 400 প্রদর্শিত হবে।
CherryPy তে ইনপুট ভ্যালিডেশন অত্যন্ত গুরুত্বপূর্ণ এবং আপনি এটি অনেক সহজে কাস্টম ভ্যালিডেটর তৈরি করে বা CherryPy এর বিল্ট-ইন টুলস ব্যবহার করে পরিচালনা করতে পারেন। আপনি বিভিন্ন ভ্যালিডেশন স্ট্রাটেজি যেমন সাধারণ ফিল্ড ভ্যালিডেশন, কাস্টম লজিক প্রয়োগ বা ইউজার ইনপুট চেকিং ব্যবহার করতে পারেন। CherryPy এ কাস্টম ভ্যালিডেশন ব্যবহারের মাধ্যমে আপনি আরও নির্ভরযোগ্য এবং সিকিউর ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারবেন।
CherryPy ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টে Form Data Persistency এবং Session Management ব্যবস্থাপনা অত্যন্ত গুরুত্বপূর্ণ। এগুলো ব্যবহারকারীর তথ্য সংরক্ষণ এবং অ্যাপ্লিকেশনের মধ্যে একটি ধারাবাহিক যোগাযোগ বজায় রাখার জন্য প্রয়োজনীয়। CherryPy এ ফর্ম ডেটা এবং সেশন ম্যানেজমেন্ট খুবই সহজ এবং কার্যকরভাবে ব্যবহৃত হয়। এখানে CherryPy তে ফর্ম ডেটা প্রিজারভেশন (Persistency) এবং সেশন ব্যবস্থাপনা (Session Management) সম্পর্কে বিস্তারিত আলোচনা করা হলো।
CherryPy তে Form Data Persistency
ফর্ম ডেটা প্রিজারভেশন হল ব্যবহারকারীর ইনপুট তথ্য সাময়িকভাবে সঠিকভাবে সংরক্ষণ করার প্রক্রিয়া। CherryPy ফর্ম ডেটা প্রিজার্ভ করতে cherrypy.request অবজেক্টের মাধ্যমে ফর্ম ডেটা অ্যাক্সেস করতে সাহায্য করে।
CherryPy তে ফর্ম ডেটা গ্রহণ এবং প্রক্রিয়া:
ফর্ম ডেটা পাঠানোর জন্য HTML ফর্ম তৈরি করতে হবে। তারপর CherryPy এর cherrypy.request.params ব্যবহার করে সেই ডেটা গ্রহণ করা যায়।
উদাহরণ: ফর্ম ডেটা গ্রহণ
HTML ফর্ম (index.html):
<!DOCTYPE html>
<html>
<head><title>ফর্ম ডেটা</title></head>
<body>
<h1>ব্যবহারকারী ইনপুট</h1>
<form method="POST" action="/submit">
নাম: <input type="text" name="username" required><br><br>
ইমেইল: <input type="email" name="email" required><br><br>
<input type="submit" value="জমা দিন">
</form>
</body>
</html>
CherryPy অ্যাপ (app.py):
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
with open("index.html", "r") as f:
return f.read()
@cherrypy.expose
def submit(self, username, email):
return f"আপনার নাম: {username}, ইমেইল: {email}"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
কোড ব্যাখ্যা:
indexমেথড: ফর্মের HTML পেজ প্রদান করে।submitমেথড: ফর্ম ডেটা POST হয়ে আসলে CherryPy তা গ্রহণ করে এবং ইউজারের ইনপুট প্রদর্শন করে।
এখন, যদি আপনি http://localhost:8080 এ গিয়ে ফর্মটি পূর্ণ করেন এবং জমা দেন, আপনি আপনার ইনপুট ডেটা রিটার্ন হিসেবে দেখতে পাবেন।
CherryPy তে Session Management
Session Management হল ব্যবহারকারীর ইনপুট এবং অ্যাপ্লিকেশনের মধ্যে ধারাবাহিক যোগাযোগ বজায় রাখার প্রক্রিয়া। CherryPy সেশন ম্যানেজমেন্টের জন্য নিজস্ব সেশন টুল সরবরাহ করে, যা HTTP কুকি ব্যবহার করে সেশন সংরক্ষণ করে। এটি সাধারণত লগইন সিস্টেম, ইউজার প্রেফারেন্স সংরক্ষণ ইত্যাদিতে ব্যবহৃত হয়।
CherryPy তে সেশন ব্যবহারের জন্য সেশন টুল ব্যবহার:
CherryPy তে সেশন ব্যবহারের জন্য tools.sessions সক্রিয় করতে হয়।
উদাহরণ: সেশন ব্যবস্থাপনা
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return '''
<html>
<head><title>CherryPy সেশন</title></head>
<body>
<h1>ব্যবহারকারী সেশন</h1>
<form method="POST" action="/set_session">
আপনার নাম: <input type="text" name="username" required><br><br>
<input type="submit" value="সেট সেশন">
</form>
</body>
</html>
'''
@cherrypy.expose
def set_session(self, username):
cherrypy.session['username'] = username
return f"আপনার নাম সেশন এ সংরক্ষিত: {username}"
@cherrypy.expose
def get_session(self):
username = cherrypy.session.get('username', 'অজ্ঞাত')
return f"সেশন থেকে আপনার নাম: {username}"
if __name__ == '__main__':
cherrypy.config.update({'tools.sessions.on': True, 'tools.sessions.timeout': 60})
cherrypy.quickstart(MyApp())
কোড ব্যাখ্যা:
tools.sessions.on: সেশন চালু করা হয়।tools.sessions.timeout: সেশনের টাইমআউট সেট করা হয় (এখানে 60 সেকেন্ড)।cherrypy.session['username']: সেশনে ইউজারের নাম সংরক্ষণ করা হয়।cherrypy.session.get(): সেশন থেকে তথ্য পুনরুদ্ধার করা হয়।
এখন, যখন আপনি http://localhost:8080 এ গিয়ে নাম ইনপুট করবেন এবং সেট সেশন বাটনে ক্লিক করবেন, এটি সেশন এ আপনার নাম সংরক্ষণ করবে। পরবর্তী সময়ে /get_session URL এ গিয়ে আপনি আপনার সেশন ডেটা দেখতে পারবেন।
ফর্ম ডেটা এবং সেশন সম্পর্ক
একটি অ্যাপ্লিকেশনে ফর্ম ডেটা এবং সেশন একসাথে ব্যবহার করে ব্যবহারকারীর তথ্য সঠিকভাবে পরিচালনা করা যায়। যেমন, লগইন প্রক্রিয়া বা ইউজার প্রেফারেন্স সংরক্ষণ।
উদাহরণ: লগইন সিস্টেম
import cherrypy
class LoginApp:
@cherrypy.expose
def index(self):
if 'username' in cherrypy.session:
return f"স্বাগতম, {cherrypy.session['username']}!"
else:
return '''
<html>
<head><title>লগইন</title></head>
<body>
<form method="POST" action="/login">
ইউজারনেম: <input type="text" name="username" required><br><br>
পাসওয়ার্ড: <input type="password" name="password" required><br><br>
<input type="submit" value="লগইন">
</form>
</body>
</html>
'''
@cherrypy.expose
def login(self, username, password):
# সাধারণত পাসওয়ার্ড যাচাইয়ের জন্য ডাটাবেস ব্যবহার করা হয়
if username == 'admin' and password == 'password':
cherrypy.session['username'] = username
return f"স্বাগতম, {username}!"
else:
return "অবৈধ ইউজারনেম বা পাসওয়ার্ড।"
if __name__ == '__main__':
cherrypy.config.update({'tools.sessions.on': True})
cherrypy.quickstart(LoginApp())
এখানে:
/indexরুটে ইউজারনেম এবং পাসওয়ার্ড ইনপুট ফর্ম প্রদর্শন করা হয়।/loginরুটে ইউজারনেম এবং পাসওয়ার্ড যাচাই করা হয় এবং সফল হলে সেশন এ ইউজারনেম সংরক্ষণ করা হয়।
CherryPy তে ফর্ম ডেটা প্রিজারভেশন এবং সেশন ম্যানেজমেন্ট খুবই সহজ এবং কার্যকরী। CherryPy এর সেশন টুল এবং ফর্ম ডেটা পরিচালনা ব্যবস্থা আপনার অ্যাপ্লিকেশনের মধ্যে ব্যবহারকারী তথ্য ধারাবাহিকভাবে এবং নিরাপদে সংরক্ষণ করতে সাহায্য করে। এগুলোর মাধ্যমে আপনি লগইন, ইউজার প্রেফারেন্স, কাস্টম সেটিংস ইত্যাদি সহজেই পরিচালনা করতে পারেন।
Read more