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