CherryPy একটি লাইটওয়েট এবং মডুলার ওয়েব ফ্রেমওয়ার্ক, যা খুব সহজে ওয়েব অ্যাপ্লিকেশন তৈরি করার সুবিধা দেয়। CherryPy অ্যাপ্লিকেশন ডিজাইন করার সময় সাধারণত একটি নির্দিষ্ট কাঠামো অনুসরণ করা হয়, যা কোডের পরিচালনা, বর্ধনযোগ্যতা এবং রক্ষণাবেক্ষণ সহজ করে তোলে।
CherryPy অ্যাপ্লিকেশনের একটি সাধারণ স্ট্রাকচার নিচে দেওয়া হলো:
CherryPy অ্যাপ্লিকেশনের মৌলিক কাঠামো
একটি সাধারণ CherryPy অ্যাপ্লিকেশন সাধারণত নিম্নলিখিত ফোল্ডার এবং ফাইল স্ট্রাকচারের অনুসরণ করে:
my_cherrypy_app/
│
├── app/
│ ├── __init__.py
│ ├── controllers.py
│ ├── models.py
│ └── views/
│ ├── base.html
│ └── index.html
│
├── config/
│ └── app.conf
│
├── static/
│ ├── css/
│ │ └── styles.css
│ ├── js/
│ │ └── script.js
│ └── images/
│ └── logo.png
│
├── run.py
└── README.md
ফোল্ডার এবং ফাইল ব্যাখ্যা
app/: অ্যাপ্লিকেশনের মূল অংশ। এখানে মডেল, কন্ট্রোলার এবং ভিউ থাকে।__init__.py: এটি একটি পাইথন প্যাকেজ ফাইল। এই ফাইলটি আপনাকেappডিরেক্টরিকে একটি পাইথন প্যাকেজ হিসেবে পরিচিত করায়।controllers.py: এখানে আপনার অ্যাপ্লিকেশনের রুট এবং কন্ট্রোলার ফাংশনগুলো থাকে। এই ফাইলের মাধ্যমে ওয়েব রিকোয়েস্ট হ্যান্ডল করা হয়।models.py: অ্যাপ্লিকেশনের ডেটা মডেল এবং ডাটাবেস লজিক সংরক্ষণ করা হয়।views/: অ্যাপ্লিকেশনের HTML টেমপ্লেটগুলো এখানে রাখা হয়। এই ফোল্ডারে টেমপ্লেট ফাইলগুলো থাকে, যেগুলো ইউজার ইন্টারফেস (UI) তৈরিতে ব্যবহৃত হয়।
config/: এই ফোল্ডারে অ্যাপ্লিকেশনের কনফিগারেশন ফাইল থাকে, যেমন CherryPy এর কনফিগারেশন সেটিংস।app.conf: CherryPy এর কনফিগারেশন ফাইল। এখানে সার্ভারের পোর্ট, হোস্ট এবং অন্যান্য কনফিগারেশন সেটিংস রাখা হয়।
static/: অ্যাপ্লিকেশনের স্ট্যাটিক ফাইল যেমন CSS, JavaScript, এবং ইমেজ এখানে থাকে।css/: সিএসএস ফাইলগুলি, যা ওয়েব পেজের স্টাইলিং নিয়ন্ত্রণ করে।js/: জাভাস্ক্রিপ্ট ফাইলগুলি, যা ওয়েব পেজে ডায়নামিক ইন্টারঅ্যাকশন যোগ করে।images/: ওয়েব পেজের জন্য প্রয়োজনীয় চিত্র বা গ্রাফিক্স।
run.py: অ্যাপ্লিকেশনটি চালানোর জন্য মূল স্ক্রিপ্ট। এখানে সার্ভার এবং অ্যাপ্লিকেশন কোড চালানোর জন্য প্রয়োজনীয় সেটআপ থাকে।- এই ফাইলে
cherrypy.quickstart()ফাংশন ব্যবহার করে অ্যাপ্লিকেশন এবং কনফিগারেশন লোড করা হয়।
- এই ফাইলে
README.md: এই ফাইলে প্রজেক্ট সম্পর্কে সংক্ষিপ্ত বিবরণ থাকে। এটি অন্যান্য ডেভেলপারদের জন্য প্রজেক্টের উদ্দেশ্য এবং ব্যবহারের নির্দেশনা প্রদান করে।
CherryPy অ্যাপ্লিকেশন তৈরি করার ধাপ
এখন CherryPy অ্যাপ্লিকেশন তৈরি করার জন্য কাঠামো এবং কোডের উদাহরণ দেখানো হলো।
১. controllers.py (কন্ট্রোলার)
import cherrypy
class MainController:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপ্লিকেশনে!"
@cherrypy.expose
def about(self):
return "এটি আমাদের সম্পর্কে পেজ।"
২. models.py (মডেল)
এখানে আপনি ডেটাবেস বা অন্য যেকোনো ডেটা ম্যানিপুলেশন লজিক রাখতে পারেন।
# models.py
# উদাহরণস্বরূপ, একটি সাধারন ক্লাস যা ডাটাবেস থেকে ডেটা ফেচ করতে পারে
class Database:
def fetch_data(self):
return {"name": "CherryPy App", "version": "1.0"}
৩. views/ (ভিউ)
এখানে HTML টেমপ্লেট ফাইল রাখা হয়। উদাহরণস্বরূপ, index.html:
<!DOCTYPE html>
<html lang="bn">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CherryPy অ্যাপ</title>
<link rel="stylesheet" href="/static/css/styles.css">
</head>
<body>
<h1>স্বাগতম CherryPy অ্যাপ্লিকেশনে!</h1>
<p>এটি একটি সিম্পল CherryPy অ্যাপ্লিকেশন উদাহরণ।</p>
</body>
</html>
৪. run.py (অ্যাপ্লিকেশন চালানো)
import cherrypy
from app.controllers import MainController
if __name__ == '__main__':
cherrypy.quickstart(MainController())
৫. app.conf (কনফিগারেশন)
[global]
server.socket_host = "127.0.0.1"
server.socket_port = 8080
[/static]
tools.staticdir.on = True
tools.staticdir.dir = "./static"
CherryPy অ্যাপ্লিকেশন পরিচালনা এবং বর্ধনযোগ্যতা
CherryPy অ্যাপ্লিকেশনটি মডুলার আর্কিটেকচারের উপর ভিত্তি করে তৈরি করা হয়, যা ডেভেলপারদের জন্য সুবিধাজনক এবং বর্ধনযোগ্য। আপনি সহজেই নতুন কন্ট্রোলার যোগ করতে পারেন, ভিউ ফাইল সম্পাদনা করতে পারেন এবং ডাটাবেস বা অন্যান্য সিস্টেমের সঙ্গে সংযোগ স্থাপন করতে পারেন।
CherryPy এর অ্যাপ্লিকেশন স্ট্রাকচার একটি মডুলার এবং সংগঠিত উপায়ে অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে। এটি ডেভেলপারদের কোড সহজে পরিচালনা এবং বর্ধন করার সুযোগ দেয়, পাশাপাশি অ্যাপ্লিকেশনকে আরও স্কেলেবেল এবং রক্ষণাবেক্ষণযোগ্য করে তোলে। CherryPy এর সিম্পল এবং সুসংগঠিত অ্যাপ্লিকেশন স্ট্রাকচার দিয়ে আপনি দ্রুত ও কার্যকরী ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারবেন।
CherryPy একটি লাইটওয়েট এবং মডুলার ওয়েব ফ্রেমওয়ার্ক, যা পাইথন ব্যবহার করে ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য ডিজাইন করা হয়েছে। CherryPy এর আর্কিটেকচার তার সহজ ব্যবহার এবং মডুলার ডিজাইনের জন্য পরিচিত। এর বিভিন্ন কম্পোনেন্ট ওয়েব অ্যাপ্লিকেশন পরিচালনায় সহায়তা করে এবং বিভিন্ন ফিচারের জন্য আলাদা উপাদান সরবরাহ করে।
CherryPy এর আর্কিটেকচার
CherryPy আর্কিটেকচার একটি মডুলার ও অবজেক্ট-ওরিয়েন্টেড (Object-Oriented) সিস্টেম। এটি একটি HTTP সার্ভার এবং একটি ওয়েব ফ্রেমওয়ার্ক হিসেবে কাজ করে। CherryPy ওয়েব অ্যাপ্লিকেশনের বিভিন্ন অংশ আলাদা আলাদা কম্পোনেন্টে বিভক্ত করে, যা ওয়েব রিকোয়েস্ট এবং রেসপন্স প্রসেসিং, রাউটিং, সেশন ম্যানেজমেন্ট, লগিং ইত্যাদি পরিচালনা করে।
CherryPy এর প্রধান কম্পোনেন্টস
১. HTTP সার্ভার (HTTP Server)
CherryPy নিজস্ব HTTP সার্ভার সরবরাহ করে, যা ওয়েব অ্যাপ্লিকেশন রান করার জন্য বাইরের সার্ভারের প্রয়োজন হয় না। এটি সরাসরি ওয়েব রিকোয়েস্ট গ্রহণ এবং প্রসেস করে।
- মাল্টি-থ্রেডিং (Multithreading): CherryPy HTTP সার্ভার মাল্টি-থ্রেডিং সাপোর্ট করে, যাতে একাধিক ক্লায়েন্ট একসাথে সার্ভিস পেতে পারে।
- হ্যান্ডলিং HTTP রিকোয়েস্ট: এটি HTTP রিকোয়েস্ট গ্রহণ করে এবং সেগুলিকে ডিফাইন করা রুটের (URI) সাথে মিলিয়ে মেথডগুলো কল করে।
২. রাউটিং (Routing)
CherryPy তে রাউটিং সিস্টেম হ্যান্ডলিং রিকোয়েস্ট এবং সঠিক মেথড কল করার দায়িত্ব পালন করে।
- URI Mapping: ওয়েব রিকোয়েস্টের URI অনুযায়ী CherryPy কনফিগার করা মেথডের সাথে রিকোয়েস্টকে ম্যাপ করে।
@cherrypy.expose: রাউটিং মেথডগুলোকে@cherrypy.exposeডেকোরেটরের মাধ্যমে প্রকাশ করা হয়, যা সেগুলোকে ওয়েব রিকোয়েস্টের জন্য অ্যাক্সেসযোগ্য করে তোলে।
৩. Request/Response Object (রিকোয়েস্ট/রেসপন্স অবজেক্ট)
CherryPy এর রিকোয়েস্ট এবং রেসপন্স অবজেক্ট ওয়েব রিকোয়েস্ট এবং রেসপন্সের ডেটা সংরক্ষণ এবং প্রসেসিংয়ের জন্য ব্যবহার করা হয়।
- Request Object: এটি ক্লায়েন্ট থেকে আসা রিকোয়েস্টের সমস্ত তথ্য (যেমন HTTP মেথড, হেডার, প্যারামিটার) ধারণ করে।
- Response Object: এটি সার্ভার থেকে ক্লায়েন্টে পাঠানো রেসপন্সের তথ্য ধারণ করে, যেমন রেসপন্স স্ট্যাটাস কোড, কনটেন্ট টাইপ, কনটেন্ট ডেটা ইত্যাদি।
৪. Tools and Plugins (টুলস এবং প্লাগ-ইন)
CherryPy এর টুলস এবং প্লাগ-ইন বিভিন্ন অতিরিক্ত ফিচার প্রদান করে। এগুলি ওয়েব অ্যাপ্লিকেশন পরিচালনায় সাহায্য করে এবং সহজে এক্সটেনশন যোগ করা যায়।
- Tools: CherryPy এর টুলস ওয়েব অ্যাপ্লিকেশনটির জন্য অতিরিক্ত ফিচার প্রদান করে, যেমন লগিং, সেশন ম্যানেজমেন্ট, কুকি ম্যানিপুলেশন, কম্প্রেশন ইত্যাদি। এগুলি সাধারণত গ্লোবালি অথবা রুটভিত্তিক কনফিগার করা যায়।
- Plugins: CherryPy দিয়ে কাস্টম প্লাগ-ইন তৈরি করা যায়, যা নতুন ফিচার বা ফাংশনালিটি যোগ করতে সাহায্য করে।
৫. Session Management (সেশন ম্যানেজমেন্ট)
CherryPy সেশন ম্যানেজমেন্ট সিস্টেম ব্যবহারকারীর সেশনের তথ্য ট্র্যাক করার জন্য ব্যবহৃত হয়। এটি কুকি ব্যবহার করে সেশন আইডি সংরক্ষণ করে এবং সার্ভারের মধ্যে সেশন ডেটা সংরক্ষণ করে।
- Session Tools: CherryPy সেশন ম্যানেজমেন্টে টুলস সরবরাহ করে, যা সেশনের জীবনকাল এবং অন্যান্য সেশন সম্পর্কিত কাজ পরিচালনা করতে ব্যবহৃত হয়।
৬. Logging System (লগিং সিস্টেম)
CherryPy একটি অন্তর্নির্মিত লগিং সিস্টেম সরবরাহ করে, যা অ্যাপ্লিকেশন থেকে আসা ইনপুট এবং আউটপুট, ত্রুটি এবং অন্যান্য কার্যকলাপ লগ করে। এটি ডিবাগিং এবং অ্যাপ্লিকেশন মনিটরিংয়ের জন্য গুরুত্বপূর্ণ।
- Access Log: এটি ওয়েব রিকোয়েস্টের তথ্য লগ করে।
- Error Log: সার্ভারের ত্রুটি এবং সমস্যাগুলির তথ্য লগ করে।
CherryPy এর আর্কিটেকচারের সুবিধা
- লাইটওয়েট: CherryPy ছোট এবং দ্রুত, যা ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টে গতি বৃদ্ধি করে।
- সহজ কনফিগারেশন: CherryPy এর কনফিগারেশন ফাইল এবং কোড খুব সহজ, যা নতুন ডেভেলপারদের জন্য উপযুক্ত।
- মডুলার ডিজাইন: CherryPy এর মডুলার আর্কিটেকচার ডেভেলপারদের সহজে বিভিন্ন টুলস এবং প্লাগ-ইন যোগ করার সুযোগ দেয়।
- স্কেলেবিলিটি: এটি ছোট থেকে বড় অ্যাপ্লিকেশন তৈরি করতে সক্ষম, কারণ এটি স্কেল করা যায়।
CherryPy একটি অত্যন্ত মডুলার এবং শক্তিশালী ওয়েব ফ্রেমওয়ার্ক, যার আর্কিটেকচার বিভিন্ন কম্পোনেন্টের সমন্বয়ে গঠিত। এর কম্পোনেন্টস যেমন HTTP সার্ভার, রাউটিং, সেশন ম্যানেজমেন্ট, লগিং সিস্টেম এবং টুলস CherryPy কে একটি সম্পূর্ণ ওয়েব ডেভেলপমেন্ট প্ল্যাটফর্মে পরিণত করেছে। CherryPy এর সাদামাটা, সহজ এবং কার্যকরী ডিজাইন আপনাকে দ্রুত ওয়েব অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে।
CherryPy একটি শক্তিশালী পাইথন ভিত্তিক ওয়েব ফ্রেমওয়ার্ক, যা ডেভেলপারদের জন্য ওয়েব অ্যাপ্লিকেশন তৈরি করা সহজ করে। CherryPy তে মডিউল, ক্লাস এবং ফাংশন ব্যবহারের মাধ্যমে আপনি অ্যাপ্লিকেশনটির কাঠামো গড়ে তুলতে পারেন। CherryPy মূলত ক্লাস ভিত্তিক ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর ধারণা ব্যবহার করে, যার ফলে এটি কোডকে সহজে মডুলার এবং রিইউজেবল করে তোলে।
CherryPy তে মডিউল, ক্লাস এবং ফাংশন এর ভূমিকা
- মডিউল: একটি পাইথন স্ক্রিপ্ট বা লাইব্রেরি, যা ওয়েব অ্যাপ্লিকেশনের বিভিন্ন ফিচার বা ফাংশন প্রদান করে।
- ক্লাস: CherryPy অ্যাপ্লিকেশন তৈরিতে প্রধান ভূমিকা পালন করে, কারণ এটি রিকোয়েস্ট হ্যান্ডলিং এবং URI এক্সপোজ করতে ব্যবহৃত হয়।
- ফাংশন: ওয়েব রিকোয়েস্ট প্রক্রিয়ার জন্য ব্যবহৃত বিশেষ কার্যকারিতা, যা সাধারণত ক্লাসের মেথড হিসেবে কাজ করে।
CherryPy তে মডিউল ব্যবহার
CherryPy অ্যাপ্লিকেশনের মডিউল দ্বারা বিভিন্ন কার্যাবলি বা ফিচারগুলি একসাথে সংরক্ষণ করা হয়। যেমন, ডাটাবেস কনফিগারেশন, ইউটিলিটি ফাংশন ইত্যাদি।
উদাহরণ:
database.pyমডিউল:
# database.py
def connect():
print("ডাটাবেসে সংযোগ স্থাপন করা হয়েছে")
def fetch_data():
return {"name": "CherryPy User", "role": "Developer"}
- অ্যাপ্লিকেশনে মডিউল ব্যবহার:
import cherrypy
from database import connect, fetch_data # মডিউল ইমপোর্ট
class MyApp:
@cherrypy.expose
def index(self):
connect() # ডাটাবেসে সংযোগ
data = fetch_data() # ডাটাবেস থেকে ডাটা নিয়ে আসা
return f"স্বাগতম, {data['name']}! আপনি একজন {data['role']}।"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
CherryPy তে ক্লাস ব্যবহার
CherryPy তে ক্লাসের মাধ্যমে ওয়েব পেজগুলো বা রিকোয়েস্ট হ্যান্ডলিং নিয়ন্ত্রণ করা হয়। ক্লাসে ডিফাইন করা মেথডগুলো @cherrypy.expose ডেকোরেটরের মাধ্যমে ওয়েব রিকোয়েস্টের সাথে যুক্ত করা হয়।
উদাহরণ:
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "এই হল রুট পেজ!"
@cherrypy.expose
def about(self):
return "এই হল অ্যাবাউট পেজ!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে index এবং about মেথড দুটি @cherrypy.expose ডেকোরেটরের মাধ্যমে URI রুটের সাথে যুক্ত করা হয়েছে।
CherryPy তে ফাংশন ব্যবহার
CherryPy তে ফাংশনগুলো সাধারণত ক্লাসের মেথড হিসেবে কাজ করে, যা ওয়েব রিকোয়েস্ট হ্যান্ডলিং করতে ব্যবহৃত হয়। ফাংশনগুলো URL পাথের মাধ্যমে এক্সপোজ করা হয়, এবং ফাংশনগুলো @cherrypy.expose ডেকোরেটরের মাধ্যমে URI পাথের সাথে যুক্ত থাকে।
উদাহরণ:
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপে!"
@cherrypy.expose
def greet(self, name="Guest"):
return f"হ্যালো, {name}!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে greet ফাংশনটি একটি প্যারামিটার name গ্রহণ করে এবং URL পাথ থেকে ডাইনামিক ভ্যালু হিসেবে নামটি গ্রহণ করে। উদাহরণস্বরূপ, http://localhost:8080/greet/John পেজে "হ্যালো, John!" বার্তা দেখাবে।
CherryPy তে URL পাথ এবং ফাংশন এক্সপোজ করা
CherryPy তে আপনি ফাংশনগুলো বা ক্লাসের মেথডগুলো URL পাথের সাথে এক্সপোজ করতে পারেন। এর মাধ্যমে আপনি বিভিন্ন ওয়েব পেজের জন্য নির্দিষ্ট কার্যকলাপ চালাতে পারবেন।
উদাহরণ:
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "এটি হল রুট পেজ।"
@cherrypy.expose
def profile(self, user_id):
return f"ব্যবহারকারী আইডি: {user_id}"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে /profile পাথের মাধ্যমে user_id প্যারামিটার পাঠিয়ে ব্যবহারকারীর প্রোফাইল দেখানো হবে। উদাহরণস্বরূপ: **http://localhost:8080/profile/12345**।
CherryPy তে মডিউল, ক্লাস এবং ফাংশন ব্যবহারের মাধ্যমে আপনি ওয়েব অ্যাপ্লিকেশনটি সুশৃঙ্খল এবং মডুলারভাবে তৈরি করতে পারেন।
- মডিউল ব্যবহার করে বিভিন্ন কাজ আলাদা করে রাখা যায়।
- ক্লাস দিয়ে ওয়েব পেজের রিকোয়েস্ট এবং ইউআরআই এক্সপোজ করা যায়।
- ফাংশন দিয়ে ক্লাসের মেথড হিসেবে ওয়েব রিকোয়েস্ট হ্যান্ডলিং করা হয়।
এভাবে CherryPy তে একটি শক্তিশালী এবং মডুলার ওয়েব অ্যাপ্লিকেশন তৈরি করা সম্ভব।
CherryPy তে Mounting Applications এবং Routes Configuration দুটি গুরুত্বপূর্ণ কনসেপ্ট, যা আপনাকে একাধিক অ্যাপ্লিকেশন এবং রুটের জন্য আলাদা কনফিগারেশন সেটআপ করতে সাহায্য করে। এতে একাধিক ওয়েব অ্যাপ্লিকেশন এবং পাথকে বিভিন্ন কনফিগারেশন সহ পরিচালনা করা সহজ হয়।
Mounting Applications
Mounting হল একটি প্রক্রিয়া যেখানে আপনি একটি সাব-অ্যাপ্লিকেশনকে প্রধান অ্যাপ্লিকেশনের অধীনে এক বা একাধিক URI পাথে সংযুক্ত করেন। এটি আপনাকে একাধিক অ্যাপ্লিকেশন তৈরি করে তাদের আলাদা আলাদা পাথের সাথে যুক্ত করতে সাহায্য করে।
উদাহরণ: Mounting একটি সাব অ্যাপ
ধরা যাক, আপনার একটি প্রধান অ্যাপ্লিকেশন আছে এবং একটি সাব অ্যাপ্লিকেশন যা আপনি /subapp পাথে মাউন্ট করতে চান। এখানে CherryPy এর mount ফাংশন ব্যবহার করে সেট করা হয়।
import cherrypy
class MainApp:
@cherrypy.expose
def index(self):
return "এটি প্রধান অ্যাপ্লিকেশন (Main Application)"
class SubApp:
@cherrypy.expose
def index(self):
return "এটি সাব অ্যাপ্লিকেশন (Sub Application)"
if __name__ == '__main__':
cherrypy.tree.mount(MainApp(), '/') # মূল অ্যাপ মাউন্ট
cherrypy.tree.mount(SubApp(), '/subapp') # সাব অ্যাপ মাউন্ট
cherrypy.engine.start() # সার্ভার চালু করা
cherrypy.engine.block() # সার্ভার ব্লক করা
এখানে:
/পাথটি প্রধান অ্যাপ্লিকেশনের জন্য।/subappপাথটি সাব অ্যাপ্লিকেশনের জন্য।
Routes কনফিগারেশন
CherryPy তে আপনি routes configuration ব্যবহার করে URL পাথ অনুযায়ী কনফিগারেশন নির্ধারণ করতে পারেন। এটি আপনাকে আলাদা আলাদা রুটের জন্য আলাদা কনফিগারেশন সেট করতে সক্ষম করে। সাধারণত, আপনি একাধিক পাথের জন্য বিভিন্ন কনফিগারেশন (যেমন, স্ট্যাটিক ফাইল সার্ভিং, সেশন ব্যবস্থাপনা) প্রয়োগ করতে পারেন।
উদাহরণ: Routes কনফিগারেশন
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "এটি হল রুট পেজ (Root Page)"
@cherrypy.expose
def about(self):
return "এটি হল অ্যাবাউট পেজ (About Page)"
@cherrypy.expose
def contact(self):
return "এটি হল কন্ট্যাক্ট পেজ (Contact Page)"
# কনফিগারেশন
config = {
'/about': {
'tools.sessions.on': True, # সেশন সমর্থন চালু
},
'/contact': {
'tools.gzip.on': True, # Gzip কম্প্রেশন চালু
},
}
if __name__ == '__main__':
cherrypy.quickstart(MyApp(), '/', config)
এখানে:
/aboutপাথের জন্য সেশন সমর্থন চালু করা হয়েছে।/contactপাথের জন্য Gzip কম্প্রেশন চালু করা হয়েছে।
Mounting Applications এবং Routes কনফিগারেশন একসাথে ব্যবহার
আপনি একাধিক সাব অ্যাপ্লিকেশন মাউন্ট করতে এবং তাদের জন্য আলাদা কনফিগারেশন প্রয়োগ করতে পারেন। এখানে আমরা /subapp পাথের জন্য একটি সাব অ্যাপ্লিকেশন এবং তার জন্য আলাদা কনফিগারেশন প্রয়োগ করবো।
উদাহরণ: Mounting এবং Routes কনফিগারেশন একসাথে
import cherrypy
class MainApp:
@cherrypy.expose
def index(self):
return "এটি প্রধান অ্যাপ্লিকেশন (Main Application)"
class SubApp:
@cherrypy.expose
def index(self):
return "এটি সাব অ্যাপ্লিকেশন (Sub Application)"
@cherrypy.expose
def help(self):
return "এটি সাব অ্যাপ্লিকেশন হেল্প পেজ (Help Page)"
# কনফিগারেশন
config = {
'/': {
'tools.sessions.on': True, # প্রধান অ্যাপের জন্য সেশন চালু
},
'/subapp': {
'tools.staticdir.on': True, # সাব অ্যাপের জন্য স্ট্যাটিক ফাইল সার্ভিং
'tools.staticdir.dir': './static',
},
}
if __name__ == '__main__':
cherrypy.tree.mount(MainApp(), '/', config) # প্রধান অ্যাপ মাউন্ট
cherrypy.tree.mount(SubApp(), '/subapp', config) # সাব অ্যাপ মাউন্ট
cherrypy.engine.start() # সার্ভার চালু করা
cherrypy.engine.block() # সার্ভার ব্লক করা
এখানে:
/পাথটি প্রধান অ্যাপের জন্য, যেখানে সেশন চালু করা হয়েছে।/subappপাথটি সাব অ্যাপের জন্য, যেখানে স্ট্যাটিক ফাইল সার্ভিং কনফিগার করা হয়েছে।
CherryPy তে Mounting Applications এবং Routes Configuration আপনাকে একাধিক সাব অ্যাপ্লিকেশন পরিচালনা এবং আলাদা আলাদা পাথের জন্য কাস্টম কনফিগারেশন প্রয়োগ করার ক্ষমতা প্রদান করে। এতে আপনার অ্যাপ্লিকেশনটি আরও মডুলার এবং স্কেলেবল হয়ে ওঠে। CherryPy এর এই ফিচারটি বড় এবং জটিল অ্যাপ্লিকেশনে খুবই কার্যকর।
CherryPy একটি ওয়েব ফ্রেমওয়ার্ক হিসেবে বিভিন্ন প্রক্রিয়া বা স্টেপ অনুসরণ করে যাতে ওয়েব রিকোয়েস্ট হ্যান্ডেল করতে পারে। এটি ডেভেলপারকে একটি পরিষ্কার জীবনচক্র (lifecycle) এবং রিকোয়েস্ট প্রসেসিং স্ট্রাকচার প্রদান করে, যা অ্যাপ্লিকেশন তৈরির সময় কার্যকরভাবে ব্যবহার করা যায়। এখানে CherryPy এর অ্যাপ্লিকেশন লাইফসাইকেল এবং রিকোয়েস্ট প্রসেসিং-এর বিস্তারিত আলোচনা করা হলো।
CherryPy অ্যাপ্লিকেশন লাইফসাইকেল (Application Lifecycle)
CherryPy অ্যাপ্লিকেশনের জীবনচক্রে কিছু গুরুত্বপূর্ণ পর্যায় থাকে, যেগুলো ওয়েব রিকোয়েস্ট গ্রহণ এবং প্রক্রিয়াজাত করার ক্ষেত্রে গুরুত্বপূর্ণ ভূমিকা পালন করে।
অ্যাপ্লিকেশন লাইফসাইকেলের মূল ধাপগুলো:
- Start: অ্যাপ্লিকেশন শুরু হওয়া, যেখানে CherryPy সিস্টেম কনফিগারেশন লোড করে এবং রিকোয়েস্ট হ্যান্ডলারের জন্য প্রস্তুত হয়।
- Request Handling: একটি রিকোয়েস্ট আসলে, CherryPy তার প্রয়োজনীয় রুট এবং কনফিগারেশন অনুসারে রিকোয়েস্ট হ্যান্ডেল করে।
- Response: রিকোয়েস্টের ভিত্তিতে উপযুক্ত রেসপন্স প্রদান করা হয়।
- Shutdown: অ্যাপ্লিকেশন বন্ধ হলে, CherryPy এক্সেস এবং সেশন ক্লোজ করে এবং যে কোনো পরিষেবা সম্পন্ন করে।
অ্যাপ্লিকেশন লাইফসাইকেল স্টেপসমূহ:
- Engine Start:
cherrypy.engine.start()কমান্ড দিয়ে CherryPy সার্ভার চালু করা হয়। - Request Processing: রিকোয়েস্ট আসলে CherryPy তার প্রাসঙ্গিক কনফিগারেশন অনুযায়ী রিকোয়েস্ট প্রসেস করতে শুরু করে।
- Response Generation: রিকোয়েস্টের জন্য উপযুক্ত রেসপন্স তৈরি হয় এবং ক্লায়েন্টে পাঠানো হয়।
- Engine Stop: অ্যাপ্লিকেশন বন্ধ হওয়ার সময়,
cherrypy.engine.stop()দিয়ে সার্ভার বন্ধ করা হয়।
CherryPy রিকোয়েস্ট প্রসেসিং (Request Processing)
CherryPy রিকোয়েস্ট প্রসেসিং একটি সিরিয়াল স্টেপ অনুসরণ করে, যেখানে এটি ইনকামিং রিকোয়েস্টের প্রতি সুনির্দিষ্টভাবে প্রতিক্রিয়া জানায়। প্রতিটি রিকোয়েস্ট হ্যান্ডলিং সঠিক রুটে পাঠানো হয় এবং সেখান থেকে প্রয়োজনীয় তথ্য বা রেসপন্স ফিরিয়ে আনা হয়।
রিকোয়েস্ট প্রসেসিং স্টেপগুলো:
- রিকোয়েস্ট গ্রহণ: CherryPy একটি HTTP রিকোয়েস্ট পায়, যেটি URL, HTTP মেথড (GET, POST), হেডার এবং প্যারামিটার সহ আসে।
- Routing: CherryPy রুটের মাধ্যমে রিকোয়েস্টটি পাস করে, যেমন
/indexবা/aboutপাথে। এটি অ্যাপ্লিকেশনের কন্ট্রোলার মেথডের সাথে মিলিয়ে রিকোয়েস্টটি হ্যান্ডেল করে। - Tools and Hooks: CherryPy বিভিন্ন টুলস এবং হুকস ব্যবহার করে রিকোয়েস্ট প্রসেসিংয়ের সময় অতিরিক্ত ফিচার যোগ করতে পারে, যেমন লগিং, সেশন ম্যানেজমেন্ট, প্রিফিক্স হ্যান্ডলিং ইত্যাদি।
- বিজনেস লজিক/Response Generation: রিকোয়েস্ট অনুযায়ী উপযুক্ত বিজনেস লজিক (যেমন, ডাটাবেস থেকে ডেটা রিট্রিভাল বা ফাইল রিটার্ন) প্রক্রিয়াজাত করা হয় এবং রেসপন্স তৈরি করা হয়।
- Response Return: তৈরি হওয়া রেসপন্সটি ক্লায়েন্টের কাছে পাঠানো হয়। এটি সাধারণত HTML, JSON, XML অথবা অন্য কোনো ফরম্যাটে হতে পারে।
- মিডলওয়ার (Middleware): রিকোয়েস্ট এবং রেসপন্সের উপর বিভিন্ন প্রকার প্রক্রিয়া, যেমন ডেটা প্রসেসিং, কুকিজ সেটিং, বা নিরাপত্তা যাচাই, মিডলওয়ারের মাধ্যমে বাস্তবায়িত হতে পারে।
CherryPy Request Handler
একটি CherryPy অ্যাপ্লিকেশন তৈরির সময়, রিকোয়েস্ট হ্যান্ডলারগুলো ব্যবহার করে রিকোয়েস্ট প্রসেস করা হয়। উদাহরণস্বরূপ:
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপে!"
@cherrypy.expose
def about(self):
return "এটি অ্যাবাউট পেজ।"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে:
@cherrypy.exposeডেকোরেটরটি রিকোয়েস্ট হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়। এটি প্রতিটি মেথডকে একটি URL পাথের সঙ্গে যুক্ত করে।
CherryPy Request Life Cycle
CherryPy রিকোয়েস্ট লাইফ সাইকেলকে বোঝার জন্য, একটি সাধারণ প্রক্রিয়া দেখানো হলো:
- Request: ক্লায়েন্ট একটি HTTP রিকোয়েস্ট পাঠায়।
- Routing: CherryPy রুট মেচিংয়ের মাধ্যমে মেথড নির্বাচন করে।
- Hooks and Tools: রিকোয়েস্ট প্রসেসিংয়ের সময় হুকস এবং টুলস প্রয়োগ করা হয়, যেমন সেশন ম্যানেজমেন্ট বা প্রিফিক্স ম্যানিপুলেশন।
- Business Logic: কন্ট্রোলার মেথডে বিজনেস লজিক প্রক্রিয়াজাত হয়, যেমন ডাটাবেসে প্রশ্ন পাঠানো।
- Response: প্রক্রিয়া শেষে রেসপন্স তৈরি হয় এবং ক্লায়েন্টকে পাঠানো হয়।
CherryPy Request Hooks
চেরিপাই হুকস (Hooks) আপনাকে রিকোয়েস্টের বিভিন্ন ধাপে অতিরিক্ত কার্যক্রম যোগ করার সুযোগ দেয়। কিছু জনপ্রিয় হুকস:
- before_request: রিকোয়েস্ট গ্রহণের আগে কিছু কার্যক্রম করতে।
- after_request: রিকোয়েস্ট শেষ হওয়ার পরে কিছু কার্যক্রম করতে।
উদাহরণ:
import cherrypy
def before_request():
print("রিকোয়েস্ট আসছে...")
class MyApp:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপে!"
if __name__ == '__main__':
cherrypy.tools.before_request = cherrypy.Tool('before_request', before_request)
cherrypy.quickstart(MyApp())
CherryPy এর অ্যাপ্লিকেশন লাইফসাইকেল এবং রিকোয়েস্ট প্রসেসিং সিস্টেমটি ডেভেলপারদের একটি পরিষ্কার এবং মডুলার ওয়েব অ্যাপ্লিকেশন তৈরি করার সুযোগ দেয়। এটি রিকোয়েস্ট গ্রহণ থেকে রেসপন্স প্রদান পর্যন্ত সব কিছু সুশৃঙ্খলভাবে প্রক্রিয়া করে, এবং প্রয়োজনীয় কাস্টমাইজেশন এবং অপটিমাইজেশন এর মাধ্যমে আপনাকে আরও কার্যকরী অ্যাপ্লিকেশন নির্মাণে সহায়তা করে।
Read more