CherryPy তে Routing এবং URL Mapping হল অ্যাপ্লিকেশনের ইউআরএল (URL) পাথগুলিকে নির্দিষ্ট ফাংশন বা ক্লাসের সাথে সংযুক্ত করার প্রক্রিয়া। এর মাধ্যমে আপনি সহজেই বিভিন্ন URL রুটের জন্য ভিন্ন ভিন্ন কার্যক্রম বা পেজ রেন্ডার করতে পারেন। CherryPy তে URL Mapping এর মাধ্যমে ওয়েব রিকোয়েস্টগুলো সঠিক কোডের অংশে পরিচালিত হয়।
Routing কী?
Routing হল একটি প্রক্রিয়া, যার মাধ্যমে আপনি URL পাথকে একটি নির্দিষ্ট ফাংশন, মেথড বা ক্লাসের সাথে ম্যাপ করেন। এই প্রক্রিয়া ওয়েব অ্যাপ্লিকেশনকে বিভিন্ন URL এর জন্য নির্দিষ্ট হ্যান্ডলার বা এক্সিকিউটেবল কোড অ্যাসাইন করতে সাহায্য করে।
URL Mapping কী?
URL Mapping হচ্ছে রুট পাথগুলিকে একটি নির্দিষ্ট মেথড বা ক্লাসের সাথে সংযুক্ত করার পদ্ধতি। আপনি যখন কোন নির্দিষ্ট URL এ রিকোয়েস্ট করেন, তখন CherryPy সেই রিকোয়েস্টটি সঠিক মেথড বা ক্লাসের সাথে মেলানোর চেষ্টা করে।
CherryPy তে Routing এবং URL Mapping উদাহরণ
১. Simple Routing Example
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)"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে:
/রুট পাথেindexমেথড মাপ করা হয়েছে।/aboutরুট পাথেaboutমেথড।/contactরুট পাথেcontactমেথড।
২. Dynamic URL Mapping
CherryPy তে আপনি ডায়নামিক URL Mapping ও করতে পারেন। উদাহরণস্বরূপ, আপনি প্যারামিটার পাস করতে পারেন URL এর মাধ্যমে, এবং তা গ্রহণ করে পেজ রেন্ডার করতে পারেন।
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "এটি রুট পেজ (Root Page)"
@cherrypy.expose
def greet(self, name="Guest"):
return f"স্বাগতম, {name}!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে /greet/John URL দিলে, রেসপন্স হবে স্বাগতম, John!
৩. URL প্যারামিটার গ্রহণ
CherryPy তে URL থেকে প্যারামিটার নিতে এবং তা দিয়ে কোড চালাতে পারেন। এটি ডাইনামিক রাউটিংয়ের একটি উদাহরণ।
import cherrypy
class MyApp:
@cherrypy.expose
def greet(self, name):
return f"স্বাগতম, {name}!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখন, URL এ /greet/John দিলে, রেসপন্স হবে স্বাগতম, John!
CherryPy Routing ও URL Mapping কনফিগারেশন
CherryPy তে আপনি routes এবং URL pattern matching কনফিগারেশন সেট করতে পারেন, যেখানে আপনি কনফিগারেশন ফাইল ব্যবহার করে নির্দিষ্ট রুট ও রিকোয়েস্ট হ্যান্ডলারের সাথে যুক্ত করতে পারবেন।
উদাহরণ: app.conf কনফিগারেশন ফাইল
[global]
server.socket_host = "127.0.0.1"
server.socket_port = 8080
[/about]
tools.sessions.on = True
[/contact]
tools.staticdir.on = True
tools.staticdir.dir = "./static"
এই কনফিগারেশন ফাইলটি নির্দিষ্ট রুটের জন্য কনফিগারেশন সেট করে:
/aboutপাথে সেশন সাপোর্ট চালু করছে।/contactপাথে স্ট্যাটিক ফাইল সার্ভিং চালু করছে।
URL Pattern Matching এবং URL Parameters
CherryPy তে আপনি URL প্যারামিটার বা URL প্যাটার্ন ব্যবহার করে রাউটিং করতে পারেন। উদাহরণস্বরূপ, আপনি চাইলে URL পাথের অংশ হিসেবে সংখ্যা বা টেক্সট পাঠাতে পারেন এবং তা মেথডের প্যারামিটার হিসেবে নিতে পারেন।
উদাহরণ:
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "এটি রুট পেজ (Root Page)"
@cherrypy.expose
def greet(self, name="Guest"):
return f"স্বাগতম, {name}!"
@cherrypy.expose
def product(self, product_id):
return f"প্রোডাক্ট আইডি: {product_id}"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে, /product/123 এ গেলে রেসপন্স হবে: প্রোডাক্ট আইডি: 123
CherryPy তে Dynamic Routing (Regex)
CherryPy তে রেগুলার এক্সপ্রেশন (Regex) ব্যবহার করে ডাইনামিক রাউটিং করা সম্ভব। এটি ইউআরএল প্যাটার্নের সাথে মিলে যাওয়া পাথের জন্য রিকোয়েস্ট হ্যান্ডলারের সাথে ম্যাপ করে।
উদাহরণ:
import cherrypy
import re
class MyApp:
@cherrypy.expose
def index(self):
return "এটি রুট পেজ (Root Page)"
@cherrypy.expose
def product(self, product_id):
if re.match(r'\d+', product_id): # শুধু সংখ্যাই গ্রহণ করবে
return f"প্রোডাক্ট আইডি: {product_id}"
else:
return "অবৈধ প্রোডাক্ট আইডি"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে, /product/123 বা /product/456 বৈধ হবে, কিন্তু /product/abc অবৈধ হবে এবং "অবৈধ প্রোডাক্ট আইডি" দেখাবে।
উপসংহার
CherryPy তে Routing এবং URL Mapping এর মাধ্যমে আপনি খুব সহজেই বিভিন্ন URL পাথের জন্য নির্দিষ্ট কোড বা ফাংশন অ্যাসাইন করতে পারেন। CherryPy আপনাকে বিভিন্ন ধরনের রাউটিং এবং ডাইনামিক URL প্যারামিটার গ্রহণের সুযোগ দেয়, যা ওয়েব অ্যাপ্লিকেশন তৈরি করার সময় অত্যন্ত কার্যকরী।
URL Mapping হলো একটি প্রক্রিয়া যেখানে ওয়েব অ্যাপ্লিকেশনের বিভিন্ন URL বা URI পাথকে তাদের সম্পর্কিত ফাংশন, মেথড বা ভিউ-এর সাথে ম্যাপ করা হয়। CherryPy তে, URL Mapping এর মাধ্যমে আপনি ওয়েব অ্যাপ্লিকেশনটি কীভাবে ক্লায়েন্টের রিকোয়েস্ট গ্রহণ করবে এবং প্রক্রিয়া করবে তা নির্ধারণ করেন।
CherryPy তে, URL Mapping সাধারণত @cherrypy.expose ডেকোরেটরের মাধ্যমে করা হয়। যখন একটি রিকোয়েস্ট আসে, CherryPy সেই রিকোয়েস্টটি রুটের সাথে মিলিয়ে নির্দিষ্ট মেথড বা ফাংশনকে কল করে।
URL Mapping এর মৌলিক ধারণা
CherryPy তে, URL Mapping মূলত পাথ (path) এর সাথে মেথডের সংযোগ স্থাপন করে। অর্থাৎ, আপনি নির্দিষ্ট URL পাথের জন্য একটি মেথড বা ফাংশন তৈরি করেন এবং CherryPy সেই মেথড বা ফাংশনটি ব্যবহার করবে রিকোয়েস্টটি হ্যান্ডেল করার জন্য।
উদাহরণ:
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)"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে, CherryPy তে /, /about এবং /contact এই URL পাথগুলো index, about এবং contact মেথডগুলোর সাথে ম্যাপ করা হয়েছে।
/রুট পাথকেindexমেথডে ম্যাপ করা হয়েছে।/aboutপাথকেaboutমেথডে ম্যাপ করা হয়েছে।/contactপাথকেcontactমেথডে ম্যাপ করা হয়েছে।
URL Mapping কীভাবে কাজ করে?
CherryPy তে, URL Mapping কাজ করে এইভাবে:
- Request Handling: যখন কোনও ইউজার একটি URL পাথ এ রিকোয়েস্ট পাঠায় (যেমন:
http://localhost:8080/about), CherryPy সেই URL পাথটি মেটাচ্ছে কিনা পরীক্ষা করে। - Method Mapping: CherryPy সেই URL পাথের সাথে সংশ্লিষ্ট মেথড বা ফাংশন কল করে। উদাহরণস্বরূপ,
/aboutURL রিকোয়েস্ট হলেabout()মেথডটি কল হবে। - Response: মেথডটি তার রিটার্ন ভ্যালু (যেমন: HTML, JSON, বা টেক্সট) ফেরত পাঠাবে, যা ব্রাউজারে প্রদর্শিত হবে।
Dynamic URL Mapping
CherryPy তে আপনি ডায়নামিক URL Mapping করতে পারেন, যেখানে URL পাথের অংশগুলিকে পরিবর্তনশীল হিসেবে ব্যবহার করা হয়। এটি ডাইনামিক রাউটিং এর জন্য সহায়ক।
উদাহরণ:
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "এটি রুট পেজ (Root Page)"
@cherrypy.expose
def greet(self, name):
return f"হ্যালো, {name}!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে /greet/<name> রাউটটি greet() মেথডের সাথে ম্যাপ করা হয়েছে। আপনি যদি /greet/Rahul লিখেন, তাহলে রেসপন্স হবে:
হ্যালো, Rahul!
এটি ডায়নামিক URL Mapping, যেখানে name প্যারামিটারটি ইউজারের ইনপুট অনুযায়ী বদলাবে।
URL Mapping এবং Configuration
CherryPy তে URL Mapping কনফিগারেশন ফাইলের মাধ্যমে কাস্টমাইজ করা যায়। আপনি আলাদা আলাদা URL রাউটের জন্য কনফিগারেশন ফাইল ব্যবহার করতে পারেন।
উদাহরণ:
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "এটি রুট পেজ (Root Page)"
@cherrypy.expose
def about(self):
return "এটি অ্যাবাউট পেজ (About Page)"
config = {
'/about': {
'tools.sessions.on': True # সেশন সমর্থন চালু
}
}
if __name__ == '__main__':
cherrypy.quickstart(MyApp(), '/', config)
এখানে /about রুটের জন্য সেশন চালু করা হয়েছে।
CherryPy তে URL Mapping ওয়েব অ্যাপ্লিকেশনের জন্য একটি অত্যন্ত গুরুত্বপূর্ণ ধারণা। এর মাধ্যমে বিভিন্ন URL পাথকে নির্দিষ্ট মেথড বা ফাংশনের সাথে যুক্ত করা হয়। এটি ডায়নামিক এবং কাস্টম URL রাউটিং সিস্টেম তৈরি করতে সহায়তা করে, যা ওয়েব অ্যাপ্লিকেশনকে আরও নমনীয় ও শক্তিশালী করে তোলে।
CherryPy তে Static এবং Dynamic Routes কনফিগার করা খুবই সহজ। Static routes বা static files সাধারণত এমন রুট বা URL গুলি যেখানে স্ট্যাটিক ফাইল যেমন HTML, CSS, JavaScript বা ইমেজ সার্ভ করা হয়। Dynamic routes এর মাধ্যমে আপনি প্যারামিটার সহ ডেটা বা অন্যান্য তথ্য প্রক্রিয়া করতে পারেন এবং ওয়েব পেজের মাধ্যমে ডায়নামিক কনটেন্ট রেন্ডার করতে পারেন।
Static Routes কনফিগারেশন
Static routes হলো এমন রুট যেখানে কোনো স্ট্যাটিক ফাইল সার্ভ করা হয়। সাধারণত CSS, JS, ইমেজ বা এমন কোনো ফাইল যেগুলি পরিবর্তন না হয়ে এক্সেস করা হয়।
Static File Serve করার উদাহরণ:
import cherrypy
class StaticFileServer:
@cherrypy.expose
def index(self):
return "স্ট্যাটিক ফাইল সার্ভ করার উদাহরণ"
# কনফিগারেশন
config = {
'/static': {
'tools.staticdir.on': True, # স্ট্যাটিক ফাইল সার্ভ চালু
'tools.staticdir.dir': './static', # স্ট্যাটিক ফাইলের লোকেশন
}
}
if __name__ == '__main__':
cherrypy.quickstart(StaticFileServer(), '/', config)
এখানে:
/staticপাথ ব্যবহার করা হয়েছে।tools.staticdir.onএবংtools.staticdir.dirব্যবহার করে স্ট্যাটিক ফাইল সরবরাহ করা হয়েছে।
ফাইল কাঠামো:
project/
│
├── app.py
├── static/
│ ├── styles.css
│ └── script.js
ব্রাউজারে পরীক্ষা:
আপনি যদি ব্রাউজারে গিয়ে http://127.0.0.1:8080/static/styles.css বা http://127.0.0.1:8080/static/script.js অ্যাক্সেস করেন, তবে আপনি স্ট্যাটিক ফাইলটি দেখতে পাবেন।
Dynamic Routes কনফিগারেশন
Dynamic routes হলো এমন রুট যেখানে URL পাথের অংশ হিসেবে ডায়নামিক প্যারামিটার ব্যবহার করা হয়। উদাহরণস্বরূপ, ইউজার আইডি বা ডেটাবেস থেকে প্রাপ্ত কোনো ডেটা URL এর মাধ্যমে প্রক্রিয়া করা।
Dynamic Route উদাহরণ:
import cherrypy
class DynamicRoute:
@cherrypy.expose
def index(self):
return "ডায়নামিক রুট উদাহরণ"
@cherrypy.expose
def greet(self, name="Guest"):
return f"স্বাগতম, {name}!"
@cherrypy.expose
def user(self, user_id):
return f"আপনার ইউজার আইডি: {user_id}"
if __name__ == '__main__':
cherrypy.quickstart(DynamicRoute())
এখানে:
greetমেথডেnameপ্যারামিটার ব্যবহার করা হয়েছে, যা URL পাথ থেকে ডায়নামিকভাবে প্রাপ্ত হয়।userমেথডেuser_idডায়নামিক প্যারামিটার হিসেবে ব্যবহার করা হয়েছে।
ব্রাউজারে পরীক্ষা:
http://127.0.0.1:8080/greet/John→ "স্বাগতম, John!"http://127.0.0.1:8080/user/12345→ "আপনার ইউজার আইডি: 12345"
Static এবং Dynamic Routes একসাথে কনফিগার করা
CherryPy তে static এবং dynamic routes একসাথে কনফিগার করা যায়। এক্ষেত্রে স্ট্যাটিক ফাইলের জন্য আলাদা কনফিগারেশন এবং ডায়নামিক পাথের জন্য ক্লাস মেথডগুলো ব্যবহার করা হয়।
উদাহরণ:
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "স্ট্যাটিক এবং ডায়নামিক রুট একত্রে কনফিগার করা"
@cherrypy.expose
def greet(self, name="Guest"):
return f"স্বাগতম, {name}!"
# কনফিগারেশন
config = {
'/static': {
'tools.staticdir.on': True,
'tools.staticdir.dir': './static',
}
}
if __name__ == '__main__':
cherrypy.quickstart(MyApp(), '/', config)
এখানে:
/staticরুটের জন্য স্ট্যাটিক ফাইল সার্ভ করা হচ্ছে।/greet/{name}ডায়নামিক রুটের মাধ্যমে ইউজারের নাম প্যারামিটার হিসেবে গ্রহণ করা হচ্ছে।
URI এবং Route কনফিগারেশন কৌশল
- Path Variables: CherryPy তে আপনি URL পাথের মধ্যে পরিবর্তনশীল অংশ (path variables) ব্যবহার করতে পারেন। যেমন
/user/{user_id}পাথের মাধ্যমে ইউজারের আইডি অ্যাক্সেস করা। - Regular Expressions: আপনি URI কনফিগারেশনে নিয়মিত অভিব্যক্তি (Regular Expressions) ব্যবহার করে ডায়নামিক রুট প্রক্রিয়া করতে পারেন।
- Nested Routes: CherryPy তে নেস্টেড রুটও কনফিগার করা যায়। অর্থাৎ একটি রুটের মধ্যে অন্য রুটকে সংজ্ঞায়িত করা।
CherryPy তে Static এবং Dynamic Routes কনফিগার করা খুবই সহজ এবং শক্তিশালী। Static routes এর মাধ্যমে আপনি স্ট্যাটিক ফাইল যেমন CSS, JS, ইমেজ সরবরাহ করতে পারেন, আর Dynamic routes এর মাধ্যমে আপনি URL পাথ থেকে প্যারামিটার নিয়ে ডায়নামিক কনটেন্ট রেন্ডার করতে পারেন। CherryPy এর এই ক্ষমতা আপনাকে আরও উন্নত এবং স্কেলযোগ্য ওয়েব অ্যাপ্লিকেশন তৈরি করতে সহায়তা করবে।
CherryPy এ Custom Routes এবং Named Routes ব্যবহার করে আপনি ওয়েব অ্যাপ্লিকেশনে বিভিন্ন ধরনের কাস্টম রুট (URL পাথ) তৈরি করতে পারেন, যা আপনাকে আপনার অ্যাপ্লিকেশনকে আরও নমনীয় এবং শক্তিশালীভাবে কাস্টমাইজ করার সুযোগ দেয়। CherryPy এ রুট তৈরি করার জন্য ক্লাস ভিত্তিক রাউটিং এবং URL ম্যানিপুলেশন করতে হয়।
Custom Routes
Custom Routes বা কাস্টম রাউটিং হলো এমন একটি প্রযুক্তি যার মাধ্যমে আপনি ওয়েব অ্যাপ্লিকেশনের URL গুলিকে কাস্টমাইজ করতে পারেন। CherryPy তে কাস্টম রাউটিং সাধারণত ক্লাস এবং মেথডের মাধ্যমে তৈরি করা হয়, যেখানে মেথডগুলো নির্দিষ্ট পাথ বা URL এ ম্যাপ করা হয়।
উদাহরণ: Custom Routes তৈরি করা
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপ্লিকেশনে!"
@cherrypy.expose
def about(self):
return "এটি একটি অ্যাবাউট পেজ!"
@cherrypy.expose
def contact(self):
return "এটি একটি কন্ট্যাক্ট পেজ!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে:
indexমেথডটি/রুটের জন্য,aboutমেথডটি/aboutরুটের জন্য,contactমেথডটি/contactরুটের জন্য ম্যাপ করা হয়েছে।
URL Pattern Matching (Custom URL Patterns)
CherryPy তে আপনি URL প্যাটার্নও নির্ধারণ করতে পারেন। এটি আপনাকে dynamic URL পাথ তৈরি করতে সাহায্য করে, যেখানে URL এর অংশগুলো ভেরিয়েবল হিসেবে কাজ করতে পারে।
উদাহরণ: URL Pattern Matching
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপ্লিকেশনে!"
@cherrypy.expose
def user(self, username):
return f"স্বাগতম, {username}!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে:
userমেথডটি/user/<username>পাথের জন্য ম্যাপ করা হয়েছে।- উদাহরণস্বরূপ, আপনি http://127.0.0.1:8080/user/JohnDoe লিখে "স্বাগতম, JohnDoe!" দেখতে পারবেন।
Named Routes
Named Routes হলো এমন একটি রাউটিং ব্যবস্থা যেখানে নির্দিষ্ট রুটের জন্য একটি নাম দেওয়া হয়। এটি আপনাকে URL গুলি আরও সুনির্দিষ্টভাবে পরিচালনা করতে সহায়তা করে। CherryPy তে named routes তৈরি করার জন্য সাধারণত কোডের মধ্যে রাউটগুলোকে আলাদা আলাদা ভাবে ডিফাইন করা হয়।
উদাহরণ: Named Routes তৈরি করা
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপ্লিকেশনে!"
@cherrypy.expose
def user(self, username):
return f"স্বাগতম, {username}!"
@cherrypy.expose
def profile(self):
return "এটি আপনার প্রোফাইল পেজ।"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে:
indexরুটটি/নামে পরিচিত,userরুটটি/user/<username>নামে পরিচিত।
Named Routes এর সুবিধা:
- নাম দেওয়া রুটের মাধ্যমে আপনি URL গুলি আরও পাঠযোগ্য এবং সুনির্দিষ্ট করতে পারবেন।
- কোনো রুটের নাম পরিবর্তন করলে কোডে সেই রুটের ব্যবহার সহজে পরিবর্তন করা যায়।
URL Redirection (Route Redirects)
CherryPy তে আপনি কাস্টম রাউটকে অন্য রাউটে রিডিরেক্টও করতে পারেন। এর মাধ্যমে একটি পাথের জন্য অন্য পাথের URL পাঠানো হয়।
উদাহরণ: Route Redirect
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
raise cherrypy.HTTPRedirect("/home")
@cherrypy.expose
def home(self):
return "এটি হোম পেজ।"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে, / রুট থেকে /home পাথে রিডিরেক্ট করা হচ্ছে।
Complex Routes and Parameters
আপনি চাইলেই আরো কমপ্লেক্স রাউট তৈরি করতে পারেন, যেখানে পাথের অংশ বিভিন্ন ভেরিয়েবল ধারণ করতে পারে। CherryPy তে প্যারামিটার এবং পাথ ভেরিয়েবলগুলো সহজেই ম্যানিপুলেট করা যায়।
উদাহরণ: Complex Routes
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপ্লিকেশনে!"
@cherrypy.expose
def article(self, article_id, category):
return f"এই আর্টিকেলটি {category} ক্যাটাগরির {article_id} আইডি এর জন্য।"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে:
articleমেথডটি/article/<article_id>/<category>পাথের জন্য কাজ করবে।- উদাহরণস্বরূপ, আপনি http://127.0.0.1:8080/article/123/tech URL দিয়ে "এই আর্টিকেলটি tech ক্যাটাগরির 123 আইডি এর জন্য।" দেখতে পারবেন।
CherryPy তে Custom Routes এবং Named Routes ব্যবহার করে আপনি বিভিন্ন কাস্টম রুট এবং পাথ পরিচালনা করতে পারেন। এটি অ্যাপ্লিকেশনের URL গুলি আরও সুনির্দিষ্ট এবং লজিক্যালভাবে সংগঠিত করার সুযোগ দেয়। আপনি কাস্টম URL প্যাটার্ন, প্যারামিটার এবং রিডিরেকশনও ব্যবহার করে অ্যাপ্লিকেশনকে আরও শক্তিশালী এবং নমনীয় করতে পারবেন।
CherryPy তে Routing এবং Controller এর মধ্যে সম্পর্ক অত্যন্ত গুরুত্বপূর্ণ, কারণ এগুলো ওয়েব অ্যাপ্লিকেশনটির ইউজার ইনপুট এবং সার্ভারের রেসপন্স পরিচালনার জন্য মূল ভূমিকা পালন করে। Routing হলো সেই প্রক্রিয়া যা ইউআরএল পাথ বা রিকোয়েস্ট অনুযায়ী নির্দিষ্ট ফাংশন বা মেথডকে হ্যান্ডল করতে সহায়তা করে, এবং Controller হলো সেই অংশ যা এই রিকোয়েস্টগুলি হ্যান্ডল করে এবং উপযুক্ত রেসপন্স প্রদান করে।
Routing কি?
Routing হলো একটি প্রক্রিয়া যেখানে ওয়েব সার্ভারটি ইউআরএল পাথ (URL Path) এবং HTTP মেথড (GET, POST, PUT, DELETE ইত্যাদি) এর ভিত্তিতে একটি নির্দিষ্ট ফাংশন বা মেথডকে কল করে। সহজভাবে বলতে গেলে, Routing হল ইউজারের রিকোয়েস্টকে সঠিক Controller মেথডে পাঠানো।
উদাহরণ:
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "হ্যালো, CherryPy!"
@cherrypy.expose
def about(self):
return "এটি অ্যাবাউট পেজ।"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে, / রুট পাথে রিকোয়েস্ট এলে index মেথড কল হবে এবং /about রুট পাথে রিকোয়েস্ট এলে about মেথড কল হবে। এই প্রক্রিয়াটি Routing হিসেবে কাজ করে।
Controller কি?
Controller হলো CherryPy অ্যাপ্লিকেশনের সেই অংশ, যা রিকোয়েস্ট পায় এবং সেগুলিকে উপযুক্ত মেথডের মাধ্যমে হ্যান্ডল করে। এটি ওয়েব অ্যাপ্লিকেশনটির লজিক এবং ইউজার ইন্টারফেস (UI) এর মধ্যে একটি সংযোগকারী হিসেবে কাজ করে। CherryPy তে প্রতিটি Controller একটি ক্লাস (class) হিসেবে সংজ্ঞায়িত করা হয়, যেখানে বিভিন্ন মেথড ইউআরএল পাথ হিসেবে @cherrypy.expose ডেকোরেটরের মাধ্যমে এক্সপোজ করা হয়।
উদাহরণ:
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "হ্যালো, এই হল রুট পেজ!"
@cherrypy.expose
def about(self):
return "এটি অ্যাবাউট পেজ।"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে, MyApp ক্লাসটি CherryPy এর Controller হিসেবে কাজ করছে, এবং এর index এবং about মেথডগুলি ইউআরএল পাথের সাথে সংযুক্ত।
Routing এবং Controller এর মধ্যে সম্পর্ক
- Routing মেথডের সাথে Controller কে যুক্ত করা: CherryPy তে, Routing এবং Controller একে অপরের সাথে যুক্ত থাকে। যখন কোনো ইউজার একটি ইউআরএল পাথের জন্য রিকোয়েস্ট পাঠায়, তখন CherryPy সেই পাথটি সঠিক Controller মেথডের সাথে ম্যাপ করে এবং সে অনুযায়ী রেসপন্স প্রদান করে।
- Controller মেথডের এক্সপোজ (Expose): CherryPy তে,
@cherrypy.exposeডেকোরেটরটি একটি Controller মেথডকে একটি পাবলিক মেথড হিসেবে চিহ্নিত করে, যাতে সেটা ওয়েব থেকে এক্সেস করা যায়। এই মেথডগুলোই মূলত Routing এর মাধ্যমে নির্দিষ্ট ইউআরএল পাথের জন্য কল করা হয়। - URL Pattern Matching: CherryPy তে, ইউআরএল পাথের সাথে সঠিক মেথড মিলিয়ে Routing কাজ করে। যখন একটি রিকোয়েস্ট আসবে, CherryPy তার মধ্যে মেটাচ্যুর করা পাথের সাথে মিলে যাওয়া Controller মেথড কল করবে।
উদাহরণ:
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "এটি হল রুট পেজ"
@cherrypy.expose
def about(self):
return "এটি অ্যাবাউট পেজ"
@cherrypy.expose
def contact(self):
return "এটি কন্ট্যাক্ট পেজ"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে:
/পাথে রিকোয়েস্ট এলেindexমেথড কল হবে।/aboutপাথে রিকোয়েস্ট এলেaboutমেথড কল হবে।/contactপাথে রিকয়েস্ট এলেcontactমেথড কল হবে।
Routing এর আরো উন্নত ব্যবহার
- প্যারামিটার গ্রহণ: CherryPy তে, রুট কনফিগারেশন মেথডে প্যারামিটার পাঠানো সম্ভব। এর মাধ্যমে আপনি ডায়নামিক পেজ তৈরি করতে পারেন।
উদাহরণ:
import cherrypy
class MyApp:
@cherrypy.expose
def hello(self, name="বিশ্ব"):
return f"হ্যালো, {name}!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে, /hello রুট পাথে রিকোয়েস্ট আসলে, আপনি নাম প্যারামিটার পাস করতে পারবেন: /hello?name=রাহুল.
Summary: Routing এবং Controller এর সম্পর্ক
- Routing হলো একটি প্রক্রিয়া, যেখানে ইউআরএল পাথের সাথে সঠিক Controller মেথড মিলিয়ে দেয়া হয়।
- Controller হলো সেই অংশ, যা রিকোয়েস্ট হ্যান্ডল করে এবং রেসপন্স প্রদান করে।
- CherryPy তে, Routing এবং Controller একে অপরের সাথে সম্পর্কিত। Routing ইউআরএল পাথের মাধ্যমে Controller মেথড কল করে, এবং Controller সেই রিকোয়েস্ট হ্যান্ডল করে।
এই সম্পর্কের মাধ্যমে CherryPy আপনাকে ইউজারের রিকোয়েস্টের ভিত্তিতে উপযুক্ত রেসপন্স তৈরি করতে সাহায্য করে।
Read more