CherryPy তে Middleware এবং Plugins ব্যবহার করা হয় ওয়েব অ্যাপ্লিকেশনের কার্যকারিতা, প্রসেসিং এবং এক্সটেনশন বাড়ানোর জন্য। এগুলি বিশেষভাবে কাজ করে CherryPy অ্যাপ্লিকেশনের অন্যান্য অংশের মধ্যে অতিরিক্ত লজিক যুক্ত করতে এবং অ্যাপ্লিকেশনকে আরও নমনীয় ও শক্তিশালী করতে।
Middleware in CherryPy
Middleware হলো এমন একটি কোড বা সিস্টেম যা ওয়েব সার্ভারের রিকোয়েস্ট এবং রেসপন্সের মধ্যবর্তী স্তরে কাজ করে। এটি মূলত সার্ভারের রিকোয়েস্ট প্রক্রিয়ায় একটি ইন্টারসেপটর হিসেবে কাজ করে। CherryPy তে আপনি Middleware ব্যবহার করতে পারেন রিকোয়েস্ট বা রেসপন্স প্রসেসিং করার জন্য।
Middleware এর প্রধান বৈশিষ্ট্য:
- Request Handling: ইনকামিং রিকোয়েস্ট হ্যান্ডেল করতে ব্যবহার হয়।
- Response Handling: আউটগোইং রেসপন্স প্রসেস করতে সাহায্য করে।
- Cross-cutting Concerns: লগিং, অথেনটিকেশন, সেশন ম্যানেজমেন্ট ইত্যাদি কাজে ব্যবহার করা যায়।
CherryPy তে Middleware ব্যবহার করা
CherryPy তে Middleware প্রয়োগ করার জন্য, সাধারণত tools ব্যবহৃত হয়, যা রিকোয়েস্ট বা রেসপন্স প্রসেসিং করতে সাহায্য করে।
উদাহরণ: Custom Middleware
import cherrypy
# Custom middleware function
def custom_tool(req, res):
print("Middleware is processing the request!")
res.headers['X-Custom-Header'] = 'This is a custom header'
class MyApp:
@cherrypy.expose
@cherrypy.tools.custom_tool(on=True) # Applying custom middleware
def index(self):
return "This is the main page"
if __name__ == '__main__':
cherrypy.tools.custom_tool = cherrypy.Tool('before_handler', custom_tool) # Registering the tool as middleware
cherrypy.quickstart(MyApp())
এখানে:
custom_tool: একটি কাস্টম Middleware টুল তৈরি করা হয়েছে, যা রিকোয়েস্ট হ্যান্ডল করার সময় একটি কাস্টম হেডার যুক্ত করবে এবং লগ করবে যে Middleware সক্রিয় হয়েছে।cherrypy.tools.custom_tool: CherryPy তেbefore_handlerইভেন্টে এই Middleware টুলটি যোগ করা হয়েছে।
Plugins in CherryPy
Plugins হল এমন এক্সটেনশন যেগুলি CherryPy অ্যাপ্লিকেশনে নতুন ফিচার বা কার্যকারিতা যোগ করে। CherryPy এর প্লাগইন সিস্টেম একটি শক্তিশালী ব্যবস্থা, যা আপনাকে ডাইনামিকভাবে CherryPy অ্যাপ্লিকেশনে অতিরিক্ত ফিচার যোগ করতে সাহায্য করে।
Plugins এর প্রধান বৈশিষ্ট্য:
- Flexible: CherryPy তে প্লাগইন আপনাকে নতুন ফিচার বা টুল যোগ করতে সাহায্য করে।
- Extensible: CherryPy প্লাগইন সিস্টেম এক্সটেনশন প্রক্রিয়া সহজ করে তোলে।
CherryPy তে Plugin ব্যবহার করা
CherryPy তে একটি প্লাগইন সাধারণত Tool হিসেবে কাজ করে, যার মাধ্যমে আপনাকে অ্যাপ্লিকেশনের নির্দিষ্ট রুট বা প্রক্রিয়ায় অতিরিক্ত ফিচার যোগ করতে দেয়।
উদাহরণ: CherryPy তে Plugin ব্যবহার করা
import cherrypy
# Custom plugin (Tool) to log request details
class LogRequestPlugin(cherrypy.Tool):
def __init__(self):
super(LogRequestPlugin, self).__init__('before_handler', self.log_request)
def log_request(self, req, res):
print(f"Request method: {req.method}")
print(f"Request path: {req.path_info}")
# Registering the plugin
cherrypy.tools.log_request = LogRequestPlugin()
class MyApp:
@cherrypy.expose
@cherrypy.tools.log_request() # Applying the logging plugin
def index(self):
return "This is the main page"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে:
LogRequestPlugin: একটি কাস্টম প্লাগইন তৈরি করা হয়েছে যা রিকোয়েস্টের মেথড এবং পাথের তথ্য লগ করবে।cherrypy.tools.log_request: এই প্লাগইনটি CherryPy অ্যাপ্লিকেশনে টুল হিসেবে রেজিস্টার করা হয়েছে এবংindexমেথডে প্রয়োগ করা হয়েছে।
CherryPy তে Middleware এবং Plugins এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Middleware | Plugins (Tools) |
|---|---|---|
| ফোকাস | রিকোয়েস্ট এবং রেসপন্স প্রসেসিং | এক্সটেনশন এবং ফিচার অ্যাড করার জন্য |
| প্রয়োগ | সাধারণত রিকোয়েস্ট হ্যান্ডলিং বা রেসপন্স প্রসেসিং | অ্যাপ্লিকেশন বা রুট লেভেলে ফিচার যোগ করা |
| উদাহরণ | রিকোয়েস্ট লগিং, সেশন হ্যান্ডলিং, অথেনটিকেশন | কাস্টম টুলস (logging, validation, etc.) |
Middleware এবং Plugins CherryPy অ্যাপ্লিকেশনের কার্যকারিতা ও প্রসেসিং ক্ষমতা বৃদ্ধি করতে সাহায্য করে। Middleware সাধারণত রিকোয়েস্ট বা রেসপন্সের মধ্যে মধ্যবর্তী স্তরে কাজ করে এবং Plugins CherryPy অ্যাপ্লিকেশনে নতুন ফিচার বা কার্যকারিতা যোগ করে। এই ফিচারগুলো ব্যবহার করে আপনি CherryPy অ্যাপ্লিকেশনের ফ্লেক্সিবিলিটি এবং নিরাপত্তা অনেক বাড়িয়ে ফেলতে পারেন।
Middleware হলো একটি সফটওয়্যার কম্পোনেন্ট যা ওয়েব অ্যাপ্লিকেশনের রিকোয়েস্ট এবং রেসপন্স চেইনে মধ্যবর্তী স্তরে কাজ করে। এটি ওয়েব সার্ভারের সাথে অ্যাপ্লিকেশন বা অন্যান্য কম্পোনেন্টের মধ্যে চলে এবং রিকোয়েস্ট ও রেসপন্সের প্রক্রিয়াকে পরিবর্তন বা প্রসারিত করতে ব্যবহৃত হয়। CherryPy তে Middleware ব্যবহার করে আপনি সাধারণ রিকোয়েস্ট/রেসপন্স প্রক্রিয়া পরিচালনা করতে পারেন, যেমন লগিং, অথেনটিকেশন, বা কাস্টম প্রসেসিং।
Middleware কি?
Middleware হলো একটি সফটওয়্যার স্তর যা ওয়েব রিকোয়েস্ট ও রেসপন্সের প্রক্রিয়ার মধ্যে থাকে এবং অ্যাপ্লিকেশনের বিভিন্ন অংশের মধ্যে যোগাযোগের সুযোগ প্রদান করে। এটি আপনার ওয়েব অ্যাপ্লিকেশনের কার্যক্ষমতা বৃদ্ধি করতে সাহায্য করে, এবং বিভিন্ন ধরনের প্রক্রিয়া যেমন:
- লগিং (Logging)
- অথেনটিকেশন (Authentication)
- অথরাইজেশন (Authorization)
- Error handling
- থ্রোটলিং (Throttling) ইত্যাদি
মিডলওয়্যার সাধারনত রিকোয়েস্ট এবং রেসপন্সের উপর প্রভাব ফেলে এবং আপনাকে অতিরিক্ত বৈশিষ্ট্য যোগ করার সুযোগ দেয় যা মূল অ্যাপ্লিকেশনের মধ্যে অন্তর্ভুক্ত নয়।
CherryPy তে Middleware এর ব্যবহার
CherryPy তে Middleware এর কাজ করা হয় টুলস (tools) এর মাধ্যমে। CherryPy তে tools মূলত এমন মেথড বা ফাংশন যা রিকোয়েস্ট বা রেসপন্সে ব্যবহৃত হয়ে থাকে এবং এই টুলসগুলোকে মিডলওয়্যারের মতো ব্যবহার করা যায়। CherryPy-তে বিভিন্ন কাস্টম টুল বা মিডলওয়্যার তৈরি করে, আপনি রিকোয়েস্ট/রেসপন্স হ্যান্ডলিং প্রক্রিয়ায় নিজের প্রক্রিয়া বা ফাংশন যোগ করতে পারেন।
CherryPy তে Middleware ব্যবহারের উদাহরণ
উদাহরণ: Custom Logging Middleware
CherryPy তে একটি কাস্টম মিডলওয়্যার তৈরি করা যায় যা সমস্ত রিকোয়েস্টের জন্য লগিং চালু রাখে।
import cherrypy
# Custom middleware (logging) তৈরি করা
class LoggingMiddleware:
def __init__(self):
self.log_file = "access.log"
@cherrypy.tools.register('before_handler')
def log_request(self):
with open(self.log_file, 'a') as log:
log.write(f"Request received: {cherrypy.request.uri}\n")
class MyApp:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপে!"
if __name__ == '__main__':
cherrypy.tools.logging_middleware = LoggingMiddleware()
cherrypy.quickstart(MyApp())
ব্যাখ্যা:
LoggingMiddlewareক্লাসটি একটি কাস্টম মিডলওয়্যার তৈরি করছে, যা সব রিকোয়েস্টের লগ রাখে।@cherrypy.tools.register('before_handler'): এটি CherryPy এর টুলস সিস্টেমেbefore_handlerস্টেপেlog_requestমেথডটি যোগ করছে। এর মানে হলো,before_handlerস্টেপে লগিং হবে, অর্থাৎ রিকোয়েস্ট হ্যান্ডলিং শুরু হওয়ার আগে এটি চলবে।- এই মিডলওয়্যার দ্বারা সমস্ত রিকোয়েস্টের URL এবং অন্যান্য ডিটেইলস
access.logফাইলে লেখা হবে।
CherryPy তে Middleware এর আরও ব্যবহার
১. Authentication Middleware
একটি কাস্টম অথেনটিকেশন মিডলওয়্যার তৈরি করা যা প্রতিটি রিকোয়েস্টের জন্য ইউজারের অথেনটিকেশন চেক করে।
import cherrypy
from cherrypy.lib import auth_basic
def check_password(realm, username, password):
# ইউজারনেম এবং পাসওয়ার্ড যাচাই করা
users = {"admin": "password123", "guest": "guest123"}
return users.get(username) == password
class AuthApp:
@cherrypy.expose
@cherrypy.tools.auth_basic(check_password)
def index(self):
return "You are authenticated!"
if __name__ == '__main__':
cherrypy.quickstart(AuthApp())
এখানে, auth_basic টুল ব্যবহার করে রিকোয়েস্টের জন্য বেসিক অথেনটিকেশন চেক করা হচ্ছে।
২. Error Handling Middleware
আপনি একটি কাস্টম মিডলওয়্যার তৈরি করতে পারেন যা ওয়েব অ্যাপ্লিকেশনটির ত্রুটির জন্য (যেমন 404 বা 500) কাস্টম ত্রুটি পৃষ্ঠা প্রদর্শন করবে।
import cherrypy
class ErrorHandlingMiddleware:
@cherrypy.expose
def error_page(self):
return "কিছু ভুল হয়েছে! দয়া করে আবার চেষ্টা করুন।"
class MyApp:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপে!"
@cherrypy.expose
def trigger_error(self):
raise cherrypy.HTTPError(500, "Internal Server Error")
if __name__ == '__main__':
cherrypy.config.update({
'tools.error_page.on': True,
'tools.error_page.page': '/error_page'
})
cherrypy.quickstart(MyApp())
এখানে, একটি কাস্টম ত্রুটি পৃষ্ঠা তৈরি করা হয়েছে এবং CherryPy ত্রুটির সময় সেই পৃষ্ঠা রেন্ডার হবে।
Middleware ব্যবহারের সুবিধা
- কাস্টম প্রসেসিং: রিকোয়েস্ট বা রেসপন্স প্রক্রিয়াতে কাস্টম লজিক বা ফাংশন প্রয়োগ করা যায়।
- অথেনটিকেশন: মিডলওয়্যার ব্যবহার করে সহজে অথেনটিকেশন সিস্টেম প্রয়োগ করা যায়।
- এলার্টিং এবং লগিং: রিকোয়েস্ট এবং রেসপন্স লগিং বা অন্য কোনো প্রসেসিং মিডলওয়্যার দ্বারা করা যায়।
- Error Handling: কাস্টম ত্রুটি পৃষ্ঠা বা ত্রুটি হ্যান্ডলিং করা সহজ।
- সহজ ইন্টিগ্রেশন: CherryPy এর টুলস সিস্টেমে মিডলওয়্যার খুবই সহজে ইন্টিগ্রেট করা যায়।
CherryPy তে Middleware খুবই শক্তিশালী এবং নমনীয় টুলস সরবরাহ করে, যা আপনার অ্যাপ্লিকেশনটিকে কাস্টমাইজ করার জন্য বিশেষভাবে ব্যবহৃত হয়। আপনি যদি রিকোয়েস্ট/রেসপন্স প্রক্রিয়ার উপর প্রভাব ফেলতে চান, তবে CherryPy এর মাধ্যমে সহজে মিডলওয়্যার প্রয়োগ করতে পারেন। মিডলওয়্যার ব্যবহার করে বিভিন্ন কার্যক্রম যেমন লগিং, অথেনটিকেশন, কাস্টম ত্রুটি হ্যান্ডলিং এবং আরও অনেক কিছু সহজেই করা সম্ভব।
CherryPy তে Middleware হল এমন একটি কাস্টম কোড যা HTTP রিকোয়েস্ট বা রেসপন্সের উপর প্রক্রিয়া চালায়। Middleware সাধারণত রিকোয়েস্টের আগে বা পরে কিছু কাজ করার জন্য ব্যবহৃত হয়, যেমন লগিং, অথেনটিকেশন, সেশন ম্যানেজমেন্ট বা রিকোয়েস্ট বা রেসপন্স ডেটার পরিবর্তন। CherryPy তে middleware তৈরি করার জন্য cherrypy.Tool ব্যবহার করা হয়।
Middleware কাস্টমাইজেশন
CherryPy তে middleware তৈরি করতে হলে, Tools ব্যবহার করা হয়, যা বিভিন্ন ধরনের কাজ করতে পারে যেমন, রিকোয়েস্ট হ্যান্ডলিং, রেসপন্স বদলানো, লগিং, সেশন ম্যানেজমেন্ট ইত্যাদি।
CherryPy তে Custom Middleware তৈরি করার প্রক্রিয়া
১. Tools ব্যবহার করে Middleware তৈরি করা। ২. Middleware তে হুক সেট করা যেমন, before_handler, after_handler। ৩. CherryPy অ্যাপ্লিকেশনে ওই middleware ব্যবহার করা।
এখন চলুন এক্সাম্পল দেখে, কিভাবে CherryPy তে custom middleware তৈরি করা যায়।
উদাহরণ: Custom Middleware তৈরি করা
আমরা একটি সাধারণ middleware তৈরি করব, যা প্রতিটি রিকোয়েস্টের সময় লগ করবে এবং রেসপন্সের পর একটি মেসেজ প্রিন্ট করবে।
কোড উদাহরণ:
import cherrypy
import logging
# কাস্টম মিডলওয়্যার তৈরি করা
class CustomMiddleware(object):
def __init__(self):
# লগিং সেটআপ
self.logger = logging.getLogger('cherrypy.custom_middleware')
logging.basicConfig(level=logging.INFO)
def before_handler(self):
"""প্রতিটি রিকোয়েস্টের আগে কাজ করবে"""
self.logger.info("Request received: %s", cherrypy.request.path_info)
def after_handler(self):
"""প্রতিটি রেসপন্সের পরে কাজ করবে"""
self.logger.info("Response sent for: %s", cherrypy.request.path_info)
# CherryPy অ্যাপ্লিকেশন
class MyApp:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপে!"
# কাস্টম টুল তৈরি করা
cherrypy.tools.custom_middleware = cherrypy.Tool('before_handler', CustomMiddleware().before_handler)
cherrypy.tools.custom_middleware_after = cherrypy.Tool('after_handler', CustomMiddleware().after_handler)
if __name__ == '__main__':
# CherryPy কনফিগারেশন
cherrypy.config.update({
'tools.custom_middleware.on': True, # before_handler কল করা
'tools.custom_middleware_after.on': True # after_handler কল করা
})
cherrypy.quickstart(MyApp())
কোড ব্যাখ্যা:
CustomMiddlewareক্লাস তৈরি করা হয়েছে, যেখানে দুইটি মেথড রয়েছে:before_handler: রিকোয়েস্ট আসার আগে এক্সিকিউট হবে এবং লগ করবে।after_handler: রেসপন্স পাঠানোর পরে এক্সিকিউট হবে এবং লগ করবে।
cherrypy.tools.custom_middlewareওcherrypy.tools.custom_middleware_afterএই দুটি টুল তৈরি করেbefore_handlerএবংafter_handlerএর জন্য।- CherryPy এর
cherrypy.Toolব্যবহৃত হচ্ছেbefore_handlerএবংafter_handlerএর জন্য, যাতে রিকোয়েস্ট এবং রেসপন্সের সময় নির্দিষ্ট কোড এক্সিকিউট করা যায়। cherrypy.config.updateদিয়ে middleware-কে CherryPy অ্যাপ্লিকেশন কনফিগার করা হয়েছে।
Middleware-এর কার্যকরী ব্যবহার
এখন আপনি যখন http://127.0.0.1:8080/ তে অ্যাক্সেস করবেন, তখন চেরিপাই লগে রিকোয়েস্টের আগের এবং পরবর্তী সময়ের তথ্য দেখাবে।
লগ আউটপুট:
INFO:cherrypy.custom_middleware:Request received: /
INFO:cherrypy.custom_middleware:Response sent for: /
এখানে:
Request received:লগে দেখা যাবে যখন রিকোয়েস্ট আসবে।Response sent for:লগে দেখা যাবে যখন রেসপন্স ফেরত যাবে।
CherryPy তে Custom Middleware এর অন্যান্য ব্যবহার
- অথেনটিকেশন: ইউজারের অথেনটিকেশন চেক করতে middleware ব্যবহার করা যেতে পারে।
- লগিং: API রিকোয়েস্ট এবং রেসপন্স ট্র্যাক করার জন্য লোগিং সিস্টেম তৈরি করা যেতে পারে।
- রেসপন্স বদলানো: রেসপন্সে কোন তথ্য যোগ বা মুছে ফেলা (যেমন JSON রেসপন্সে অতিরিক্ত ডেটা যোগ করা)।
- রিকোয়েস্ট পরিবর্তন: রিকোয়েস্টে কিছু পরিবর্তন যেমন ইউজার ডেটা যোগ করা বা কোনো ভ্যালিডেশন করা।
CherryPy তে Custom Middleware ব্যবহার করে আপনি খুব সহজে রিকোয়েস্ট বা রেসপন্সের সাথে কাজ করতে পারেন। Middleware আপনাকে API বা ওয়েব অ্যাপ্লিকেশনের মধ্যে অতিরিক্ত কার্যক্রম যেমন লগিং, অথেনটিকেশন, সেশন ম্যানেজমেন্ট, বা রিকোয়েস্ট/রেসপন্স ম্যানিপুলেশন করতে সাহায্য করে। CherryPy তে cherrypy.Tool ব্যবহার করে Middleware তৈরি করা খুবই সহজ, এবং এটি কাস্টমাইজেবল যাতে আপনি আপনার প্রয়োজন অনুযায়ী সিস্টেম তৈরি করতে পারেন।
CherryPy একটি অত্যন্ত নমনীয় ফ্রেমওয়ার্ক এবং এর মধ্যে Plugins ব্যবহারের মাধ্যমে আপনি অ্যাপ্লিকেশনে বিভিন্ন অতিরিক্ত ফিচার যুক্ত করতে পারেন। CherryPy এর প্লাগইন সিস্টেম সহজেই এক্সটেনশন এবং কাস্টম ফিচার যুক্ত করতে সক্ষম, যা আপনাকে আরও বেশি কাস্টমাইজেশন এবং কার্যকারিতা প্রদান করে।
এই টিউটোরিয়ালে CherryPy এর বিভিন্ন ধরনের প্লাগইন এবং তাদের ব্যবহার নিয়ে আলোচনা করা হবে।
CherryPy প্লাগইন সিস্টেম
CherryPy তে Pluggable tools ব্যবহৃত হয়, যা আপনার অ্যাপ্লিকেশনে নির্দিষ্ট কার্যকলাপ বা ফিচার যুক্ত করার জন্য ব্যবহৃত হয়। CherryPy তে প্লাগইনগুলোর মাধ্যমে বিভিন্ন কাজ যেমন Authentication, Session Management, Static File Handling, Logging, Compression ইত্যাদি করা যায়।
CherryPy এর জনপ্রিয় প্লাগইনগুলো
- Session Management
- Static File Handling
- JSON and XML tools
- Logging Tools
- Gzip Compression
- Authentication Tools
- Request Handling Tools
1. Session Management
CherryPy তে Session Management খুবই সহজ। এটি আপনাকে ব্যবহারকারীর সেশন ডেটা সংরক্ষণ এবং পরিচালনা করতে সাহায্য করে।
উদাহরণ: Session Plugin
import cherrypy
class SessionApp:
@cherrypy.expose
def index(self):
# Session সেট করা
cherrypy.session['username'] = 'admin'
return "Session set for username: admin"
@cherrypy.expose
def show_session(self):
# Session থেকে মান পাওয়া
username = cherrypy.session.get('username', 'Guest')
return f"Hello, {username}!"
if __name__ == '__main__':
cherrypy.config.update({
'tools.sessions.on': True, # সেশন চালু করা
'tools.sessions.timeout': 60 # সেশন টাইমআউট
})
cherrypy.quickstart(SessionApp())
ব্যাখ্যা:
tools.sessions.on: সেশন ম্যানেজমেন্ট চালু করা হয়।tools.sessions.timeout: সেশনের টাইমআউট নির্ধারণ করা হয়।
2. Static File Handling
CherryPy তে Static File Handling এর জন্য একটি প্লাগইন রয়েছে যা স্ট্যাটিক ফাইল (যেমন CSS, JavaScript, ইমেজ) সঠিকভাবে পরিচালনা করতে সাহায্য করে।
উদাহরণ: Static File Handling
import cherrypy
class StaticFileApp:
@cherrypy.expose
def index(self):
return "Static files handling example"
if __name__ == '__main__':
cherrypy.config.update({
'/static': {
'tools.staticdir.on': True,
'tools.staticdir.dir': './static' # Static ফাইলের লোকেশন
}
})
cherrypy.quickstart(StaticFileApp())
ব্যাখ্যা:
tools.staticdir.on: স্ট্যাটিক ফাইল পরিবেশন চালু করা হয়।tools.staticdir.dir: স্ট্যাটিক ফাইলের ডিরেক্টরি নির্ধারণ করা হয়।
3. JSON এবং XML Tools
CherryPy তে JSON এবং XML রেসপন্স তৈরি করার জন্য প্লাগইন রয়েছে। এটি খুবই উপকারী যখন আপনি API ডেভেলপ করেন।
উদাহরণ: JSON Response
import cherrypy
import json
class JSONApp:
@cherrypy.expose
@cherrypy.tools.json_out() # JSON আউটপুট টুল
def index(self):
return {"message": "Welcome to CherryPy with JSON!"}
if __name__ == '__main__':
cherrypy.quickstart(JSONApp())
ব্যাখ্যা:
tools.json_out(): এই প্লাগইন JSON রেসপন্স তৈরি করতে ব্যবহৃত হয়।
4. Logging Tools
CherryPy তে লগিং ব্যবস্থাপনা চালানোর জন্য একটি প্লাগইন রয়েছে যা অ্যাক্সেস এবং ত্রুটি লগিংকে সহজ করে তোলে।
উদাহরণ: Logging Tool
import cherrypy
class LoggingApp:
@cherrypy.expose
def index(self):
return "Logging tools example"
if __name__ == '__main__':
cherrypy.config.update({
'log.access_file': './logs/access.log', # অ্যাক্সেস লগ ফাইল
'log.error_file': './logs/error.log' # ত্রুটি লগ ফাইল
})
cherrypy.quickstart(LoggingApp())
ব্যাখ্যা:
log.access_file: অ্যাক্সেস লগ ফাইলের লোকেশন।log.error_file: ত্রুটি লগ ফাইলের লোকেশন।
5. Gzip Compression
CherryPy তে Gzip Compression ব্যবহার করে আপনি ডেটা কম্প্রেশন করতে পারেন, যা ওয়েব পেজের লোড টাইম কমাতে সাহায্য করে।
উদাহরণ: Gzip Compression
import cherrypy
class GzipApp:
@cherrypy.expose
def index(self):
return "This response is compressed using Gzip!"
if __name__ == '__main__':
cherrypy.config.update({
'tools.gzip.on': True # Gzip কম্প্রেশন চালু করা
})
cherrypy.quickstart(GzipApp())
ব্যাখ্যা:
tools.gzip.on: Gzip কম্প্রেশন চালু করা হয়।
6. Authentication Tools
CherryPy তে কাস্টম অটেনটিকেশন সিস্টেম তৈরি করতে Authentication Tools ব্যবহার করা যায়। এটি ব্যবহারকারীর পরিচয় যাচাই করতে সাহায্য করে।
উদাহরণ: Simple Authentication Tool
import cherrypy
class AuthApp:
@cherrypy.expose
def index(self):
if not self.authenticate():
return "You must be logged in to view this page."
return "Welcome to the authenticated page!"
def authenticate(self):
# এখানে কাস্টম অটেনটিকেশন লজিক থাকবে
return True
if __name__ == '__main__':
cherrypy.quickstart(AuthApp())
ব্যাখ্যা:
authenticate()মেথডের মাধ্যমে কাস্টম অটেনটিকেশন যাচাই করা হয়।
7. Request Handling Tools
CherryPy তে Request Handling Tools ব্যবহার করে আপনি বিভিন্ন ধরণের কাস্টম রিকোয়েস্ট হ্যান্ডলিং করতে পারেন, যেমন রিকোয়েস্ট থেকে ডেটা প্যারামিটার সংগ্রহ করা বা রিকোয়েস্টে ফিল্টারিং করা।
উদাহরণ: Request Tool
import cherrypy
class RequestHandlingApp:
@cherrypy.expose
def index(self):
name = cherrypy.request.params.get('name', 'Guest')
return f"Hello, {name}!"
if __name__ == '__main__':
cherrypy.quickstart(RequestHandlingApp())
ব্যাখ্যা:
cherrypy.request.params.get(): রিকোয়েস্ট প্যারামিটার থেকে ডেটা সংগ্রহ করা হয়।
উপসংহার
CherryPy এর প্লাগইন সিস্টেম আপনার অ্যাপ্লিকেশনে বিভিন্ন কার্যকরী ফিচার যুক্ত করতে সাহায্য করে। এগুলি আপনাকে অ্যাপ্লিকেশনটিকে আরো নমনীয় এবং শক্তিশালী করতে সহায়তা করবে। CherryPy তে প্লাগইন ব্যবহার করে আপনি সেশন ম্যানেজমেন্ট, স্ট্যাটিক ফাইল সার্ভিং, JSON/XML রেসপন্স, লগিং, কম্প্রেশন, অটেনটিকেশন ইত্যাদি খুব সহজেই এক্সটেন্ড করতে পারেন।
CherryPy তে Logging এবং Error Handling ব্যবস্থাপনা অ্যাপ্লিকেশন ডেভেলপমেন্টে অত্যন্ত গুরুত্বপূর্ণ। Logging এর মাধ্যমে আপনি অ্যাপ্লিকেশনের কার্যকলাপ ট্র্যাক করতে পারেন এবং Error Handling এর মাধ্যমে সিস্টেমের ত্রুটিগুলি সঠিকভাবে পরিচালনা করতে পারেন। CherryPy এ এই দুটি ফিচার খুবই সহজভাবে কনফিগার করা যায়।
CherryPy তে Logging
CherryPy একটি শক্তিশালী লগিং সিস্টেম সরবরাহ করে, যা আপনাকে অ্যাপ্লিকেশনের অ্যাক্সেস এবং ত্রুটি লগিং পরিচালনা করতে সাহায্য করে। এটি Python এর স্ট্যান্ডার্ড logging লাইব্রেরি ব্যবহার করে।
CherryPy তে লগিং সক্রিয় করা
CherryPy তে লগিং ব্যবস্থাপনা সক্ষম করতে cherrypy.config.update() বা কনফিগারেশন ফাইল ব্যবহার করা হয়।
উদাহরণ: CherryPy তে লগিং কনফিগারেশন
import cherrypy
import logging
class LoggingExample:
@cherrypy.expose
def index(self):
cherrypy.log("এটি একটি ইনডেক্স পেজ রিকোয়েস্ট", level=logging.INFO)
return "লগিং উদাহরণ"
@cherrypy.expose
def about(self):
cherrypy.log("এটি একটি অ্যাবাউট পেজ রিকোয়েস্ট", level=logging.INFO)
return "এটি আমাদের সম্পর্কে পেজ।"
if __name__ == '__main__':
cherrypy.config.update({
'log.access_file': 'logs/access.log', # অ্যাক্সেস লগ ফাইল
'log.error_file': 'logs/error.log', # ত্রুটি লগ ফাইল
'log.screen': True, # কনসোলে লগিং
'log.format': '%(asctime)s %(levelname)s %(message)s', # লগ ফরম্যাট
})
cherrypy.quickstart(LoggingExample())
এখানে:
cherrypy.log()ফাংশনটি লগ তথ্য সরবরাহ করে এবং বিভিন্ন লগ স্তর (level) ব্যবহার করা যায় যেমন INFO, ERROR, WARNING, ইত্যাদি।log.access_fileএবংlog.error_fileকনফিগারেশন ব্যবহার করে অ্যাক্সেস এবং ত্রুটি লগ ফাইলের লোকেশন নির্ধারণ করা হয়।log.screen: কনসোলে লগ দেখতে হলে সেটিTrueকরতে হবে।
লগ স্তর (Log Levels):
- DEBUG: ডিবাগging তথ্য।
- INFO: সাধারণ কার্যকলাপের তথ্য।
- WARNING: সতর্কতা, যা ভবিষ্যতে সমস্যা হতে পারে।
- ERROR: ত্রুটি, যা কোডের অস্বাভাবিক আচরণ নির্দেশ করে।
- CRITICAL: গুরুতর ত্রুটি যা অ্যাপ্লিকেশনটি ক্র্যাশ করতে পারে।
CherryPy তে Error Handling
CherryPy তে ত্রুটি পরিচালনার জন্য বিভিন্ন পদ্ধতি রয়েছে। আপনি tools ব্যবহার করে নির্দিষ্ট রাউটের জন্য কাস্টম ত্রুটি পৃষ্ঠা নির্ধারণ করতে পারেন অথবা কাস্টম ত্রুটি হ্যান্ডলার তৈরি করতে পারেন।
উদাহরণ: ত্রুটি হ্যান্ডলার কনফিগারেশন
import cherrypy
class ErrorHandlingExample:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপে!"
@cherrypy.expose
def error(self):
# এই মেথডে কোনো ত্রুটি ইচ্ছাকৃতভাবে সৃষ্টি করা হচ্ছে
raise cherrypy.HTTPError(404, "এই পৃষ্ঠাটি পাওয়া যায়নি!")
@cherrypy.expose
def notfound(self, *args, **kwargs):
return "এটি একটি কাস্টম 404 ত্রুটি পৃষ্ঠা!"
if __name__ == '__main__':
cherrypy.config.update({
'tools.staticdir.on': True,
'tools.staticdir.dir': './static',
})
# কাস্টম 404 ত্রুটি পৃষ্ঠা সেট করা
cherrypy.tree.mount(ErrorHandlingExample(), '/', {
'/': {
'request.error_page': '/notfound'
}
})
cherrypy.quickstart(ErrorHandlingExample())
এখানে:
error()মেথডে ইচ্ছাকৃতভাবে একটি ত্রুটি তৈরি করা হয়েছে (404ত্রুটি)।notfound()মেথডটি কাস্টম 404 পৃষ্ঠা হিসেবে ব্যবহার করা হয়েছে।request.error_pageকনফিগারেশন দিয়ে আপনি অ্যাপ্লিকেশনে কাস্টম ত্রুটি পৃষ্ঠা নির্ধারণ করতে পারেন।
কাস্টম ত্রুটি হ্যান্ডলার তৈরি করা
CherryPy তে আপনি কাস্টম ত্রুটি হ্যান্ডলার তৈরি করতে পারেন, যা নির্দিষ্ট ত্রুটি ধরলে একটি নির্দিষ্ট আচরণ প্রয়োগ করবে।
উদাহরণ: কাস্টম ত্রুটি হ্যান্ডলার
import cherrypy
class CustomErrorHandler:
def handle_404(self):
return "এই পৃষ্ঠাটি পাওয়া যায়নি!"
def handle_500(self):
return "সার্ভার ত্রুটি! অনুগ্রহ করে কিছু সময় পরে চেষ্টা করুন।"
class ErrorHandlingExample:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপে!"
@cherrypy.expose
def error(self):
raise cherrypy.HTTPError(404, "এই পৃষ্ঠাটি পাওয়া যায়নি!")
if __name__ == '__main__':
cherrypy.config.update({
'tools.sessions.on': True,
'tools.staticdir.on': True,
})
# কাস্টম ত্রুটি হ্যান্ডলার সেট করা
cherrypy.tree.mount(ErrorHandlingExample(), '/', {
'/': {
'request.error_page': '/error_handler/handle_404', # কাস্টম 404 হ্যান্ডলার
'request.error_page': '/error_handler/handle_500', # কাস্টম 500 হ্যান্ডলার
}
})
cherrypy.quickstart(ErrorHandlingExample())
এখানে:
handle_404এবংhandle_500মেথডগুলো কাস্টম ত্রুটি পৃষ্ঠা প্রদান করে।
CherryPy তে Global Error Handling
CherryPy তে একটি গ্লোবাল ত্রুটি হ্যান্ডলার কনফিগার করার জন্য error_page কনফিগারেশন ব্যবহার করা যেতে পারে। এটি সার্ভারে সমস্ত ত্রুটি হ্যান্ডল করতে সক্ষম হয় এবং আপনি সমস্ত ত্রুটির জন্য একটি সাধারণ পৃষ্ঠা তৈরি করতে পারেন।
উদাহরণ: গ্লোবাল ত্রুটি হ্যান্ডলার
import cherrypy
class GlobalErrorHandler:
def __init__(self):
self.error = "সার্ভার ত্রুটি! দয়া করে কিছু সময় পরে চেষ্টা করুন।"
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপে!"
@cherrypy.expose
def error(self):
raise cherrypy.HTTPError(500, "সার্ভার ত্রুটি!")
if __name__ == '__main__':
cherrypy.config.update({
'tools.sessions.on': True,
'tools.staticdir.on': True,
})
cherrypy.tree.mount(GlobalErrorHandler(), '/', {
'/': {
'request.error_page': '/error'
}
})
cherrypy.quickstart(GlobalErrorHandler())
এখানে:
request.error_pageগ্লোবালি সেট করা হয়েছে, যাতে সব ত্রুটি এক কাস্টম পৃষ্ঠায় পরিচালিত হয়।
উপসংহার
CherryPy তে Logging এবং Error Handling ব্যবস্থাপনা অত্যন্ত গুরুত্বপূর্ণ এবং সহজ। আপনি অ্যাপ্লিকেশনের কার্যকলাপ এবং ত্রুটির লগ রাখতে পারেন এবং কাস্টম ত্রুটি পৃষ্ঠা তৈরি করে ব্যবহারকারীর জন্য ভালো অভিজ্ঞতা নিশ্চিত করতে পারেন। CherryPy এর লগিং এবং ত্রুটি পরিচালনা সিস্টেম আপনাকে অ্যাপ্লিকেশন পরিচালনার জন্য প্রয়োজনীয় ডেটা সরবরাহ করে এবং ত্রুটি হ্যান্ডলিং এর মাধ্যমে নিরাপত্তা এবং ব্যবস্থাপনা উন্নত করে।
Read more