CherryPy তে Request এবং Response হ্যান্ডলিং হলো ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের একটি গুরুত্বপূর্ণ অংশ। যখন একটি HTTP রিকোয়েস্ট আসে, তখন CherryPy সেটি গ্রহণ করে এবং প্রাসঙ্গিক রেসপন্স তৈরি করে। CherryPy রিকোয়েস্ট এবং রেসপন্স ব্যবস্থাপনা সহজ এবং লচনীয় (flexible), এবং এটি ডেভেলপারদের বিভিন্ন ধরনের কাস্টমাইজেশন করার সুযোগ দেয়।
Request Handling
CherryPy তে, রিকোয়েস্টের সাথে সম্পর্কিত তথ্য যেমন URL প্যারামিটার, HTTP হেডার, এবং রিকোয়েস্ট মেথড (GET, POST) অ্যাক্সেস করা যায়। CherryPy স্বয়ংক্রিয়ভাবে রিকোয়েস্টগুলি হ্যান্ডেল করে এবং সেগুলি সংশ্লিষ্ট পাথের জন্য এক্সপোজড মেথডে পাঠিয়ে দেয়।
রিকোয়েস্ট তথ্য অ্যাক্সেস করা
CherryPy তে রিকোয়েস্ট সম্পর্কিত তথ্য cherrypy.request এর মাধ্যমে অ্যাক্সেস করা যায়। এতে অনেক গুরুত্বপূর্ণ তথ্য থাকে, যেমন রিকোয়েস্ট পাথ, কুকি, রিকোয়েস্ট হেডার, এবং URL প্যারামিটার।
cherrypy.request এর কিছু সাধারণ বৈশিষ্ট্য:
request.method: HTTP মেথড (GET, POST, PUT, DELETE)request.params: URL প্যারামিটার এবং ফর্ম ডেটাrequest.headers: রিকোয়েস্ট হেডারrequest.cookies: কুকি
উদাহরণ: GET প্যারামিটার ব্যবহার
import cherrypy
class HelloWorld:
@cherrypy.expose
def index(self, name="Guest"):
return f"স্বাগতম, {name}!"
if __name__ == '__main__':
cherrypy.quickstart(HelloWorld())
এটি একটি GET প্যারামিটার গ্রহণ করে। উদাহরণস্বরূপ, যদি আপনি URL এ ?name=Rahul যোগ করেন, তাহলে আপনি "স্বাগতম, Rahul!" দেখতে পাবেন।
URL:
http://127.0.0.1:8080/?name=Rahul
Response Handling
CherryPy তে রেসপন্স হ্যান্ডলিংও সহজ। ডিফল্টভাবে, CherryPy প্রতিটি রিকোয়েস্টের জন্য একটি HTTP রেসপন্স পাঠায়। আপনি return স্টেটমেন্টের মাধ্যমে রেসপন্স তৈরি করেন এবং এটি অটোমেটিক্যালি ক্লায়েন্টের কাছে পাঠানো হয়।
Response Headers
রেসপন্সের জন্য কাস্টম হেডার সেট করতে পারেন cherrypy.response ব্যবহার করে।
cherrypy.response.status: HTTP স্ট্যাটাস কোড সেট করতে ব্যবহার করা হয়।cherrypy.response.headers: রেসপন্স হেডার সেট করতে ব্যবহার করা হয়।
উদাহরণ: কাস্টম স্ট্যাটাস কোড এবং হেডার
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
cherrypy.response.status = "200 OK" # কাস্টম HTTP স্ট্যাটাস
cherrypy.response.headers['Custom-Header'] = 'This is a custom header'
return "রেসপন্স সাফল্যজনক!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে কাস্টম HTTP স্ট্যাটাস কোড এবং হেডার যুক্ত করা হয়েছে। এটি HTTP রেসপন্সে কাস্টম হেডার যোগ করবে এবং স্ট্যাটাস কোড হিসেবে 200 OK পাঠাবে।
Request এবং Response Handling Example
নিচে একটি পূর্ণাঙ্গ উদাহরণ দেওয়া হলো, যেখানে রিকোয়েস্ট প্যারামিটার নেওয়া হচ্ছে এবং রেসপন্সের জন্য কাস্টম হেডার এবং স্ট্যাটাস কোড ব্যবহার করা হচ্ছে।
import cherrypy
class RequestResponseExample:
@cherrypy.expose
def index(self, name="Guest"):
# Request থেকে প্যারামিটার
user_name = name
# Response customization
cherrypy.response.status = "200 OK"
cherrypy.response.headers['Custom-Header'] = 'Request successfully processed'
return f"স্বাগতম, {user_name}!"
@cherrypy.expose
def contact(self):
cherrypy.response.status = "200 OK"
return "এটি হল যোগাযোগ পেজ।"
if __name__ == '__main__':
cherrypy.quickstart(RequestResponseExample())
এখানে:
indexমেথড GET প্যারামিটার গ্রহণ করছে এবং কাস্টম স্ট্যাটাস কোড এবং হেডার পাঠাচ্ছে।contactপেজ একটি সরল রেসপন্স পাঠাচ্ছে।
URL উদাহরণ:
http://127.0.0.1:8080/?name=Rahul- এখানে GET প্যারামিটার ব্যবহার করা হয়েছে।http://127.0.0.1:8080/contact- এখানে একটি সিম্পল রেসপন্স দেখানো হবে।
Request এবং Response-এর মাধ্যমে ডেটা পাঠানো
POST রিকোয়েস্ট হ্যান্ডলিং
CherryPy তে POST রিকোয়েস্ট হ্যান্ডলিংয়ের জন্য ফর্ম ডেটা cherrypy.request.params থেকে নেওয়া যায়।
উদাহরণ: POST রিকোয়েস্ট
import cherrypy
class FormExample:
@cherrypy.expose
def index(self):
return '''
<form method="post" action="/submit">
<label for="name">নাম:</label>
<input type="text" name="name" />
<input type="submit" value="Submit" />
</form>
'''
@cherrypy.expose
def submit(self, name):
return f"আপনার নাম: {name}"
if __name__ == '__main__':
cherrypy.quickstart(FormExample())
এখানে:
indexমেথড একটি ফর্ম তৈরি করছে।submitমেথড POST ডেটা গ্রহণ করে এবং সেটি রেসপন্স হিসেবে প্রদান করছে।
CherryPy তে Request এবং Response হ্যান্ডলিং খুবই সরল এবং নমনীয়। আপনি রিকোয়েস্ট প্যারামিটার এবং হেডার সহজেই অ্যাক্সেস করতে পারেন এবং কাস্টম রেসপন্স তৈরি করতে পারেন। CherryPy এর এই ফিচারগুলো ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টকে আরও দ্রুত এবং কার্যকরী করে তোলে।
CherryPy-তে Request Object এবং Query Parameters ওয়েব অ্যাপ্লিকেশনের ইনপুট গ্রহণ এবং প্রসেসিংয়ের জন্য গুরুত্বপূর্ণ ফিচার। Request Object হলো একটি গুরুত্বপূর্ণ অবজেক্ট, যা প্রতিটি HTTP রিকোয়েস্টের সাথে সম্পর্কিত ডেটা ধারণ করে এবং Query Parameters হলো URL-এর অংশ, যা ক্লায়েন্ট থেকে সার্ভারে ডেটা পাঠানোর জন্য ব্যবহার হয়।
CherryPy Request Object
CherryPy-তে cherrypy.request অবজেক্টটি HTTP রিকোয়েস্ট সম্পর্কিত সকল তথ্য ধারণ করে। এই অবজেক্টের মাধ্যমে আপনি রিকোয়েস্টের HTTP মেথড, ইউআরএল, কুকি, হেডার, কনটেন্ট টাইপ এবং অন্যান্য ইনপুট ডেটা অ্যাক্সেস করতে পারেন।
প্রধান বৈশিষ্ট্যসমূহ:
request.method: রিকোয়েস্টের HTTP মেথড (GET, POST, PUT, DELETE, ইত্যাদি)।request.path: রিকোয়েস্টের পাথ বা URL।request.query_string: URL থেকে পাঠানো Query String।request.params: POST ডেটা এবং URL প্যারামিটারদের অ্যাক্সেস।request.headers: রিকোয়েস্ট হেডার।request.cookies: কুকি ডেটা।
Request Object উদাহরণ
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
# HTTP মেথড চেক
method = cherrypy.request.method
# Query String এবং Parameters দেখুন
query_string = cherrypy.request.query_string
params = cherrypy.request.params
# হেডার এবং কুকি চেক
headers = cherrypy.request.headers
cookies = cherrypy.request.cookies
return f"Method: {method}, Query: {query_string}, Params: {params}, Headers: {headers}, Cookies: {cookies}"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে, cherrypy.request ব্যবহার করে রিকোয়েস্ট সম্পর্কিত সমস্ত তথ্য পাওয়া যাচ্ছে।
Query Parameters
Query Parameters হলো URL-এর অংশ, যা ? চিহ্ন দিয়ে শুরু হয় এবং একাধিক কীগুলোর মান (key-value pairs) হিসেবে থাকে। উদাহরণস্বরূপ, একটি URL হতে পারে:
http://localhost:8080/?name=John&age=30
এখানে, name এবং age হল Query Parameters, এবং তাদের মান যথাক্রমে John এবং 30।
Query Parameters পাওয়ার উদাহরণ
CherryPy-তে Query Parameters পাওয়ার জন্য cherrypy.request.params ব্যবহার করা হয়, যা একটি ডিকশনারি (dictionary) হিসেবে কাজ করে এবং URL থেকে পাঠানো সব প্যারামিটার ধারণ করে।
উদাহরণ:
import cherrypy
class MyApp:
@cherrypy.expose
def index(self, name="Unknown", age="Unknown"):
return f"Name: {name}, Age: {age}"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে, name এবং age Query Parameters হিসেবে ব্যবহার করা হয়েছে। আপনি ব্রাউজারে গিয়ে এই URLটি ব্যবহার করতে পারেন:
http://localhost:8080/?name=John&age=30
এই রিকোয়েস্টে, name এবং age প্যারামিটারগুলোর মান CherryPy এর মাধ্যমে স্বয়ংক্রিয়ভাবে মেথডে পাস করা হবে এবং আউটপুট হবে:
Name: John, Age: 30
Query String অ্যাক্সেস করা
CherryPy-তে Query String অ্যাক্সেস করতে আপনি cherrypy.request.query_string ব্যবহার করতে পারেন, যা URL থেকে আসা সমস্ত প্যারামিটারকে একটি স্ট্রিং আকারে ফেরত দেয়।
উদাহরণ:
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
query_string = cherrypy.request.query_string
return f"Query String: {query_string}"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে, যদি আপনি URLটি এইভাবে ব্যবহার করেন:
http://localhost:8080/?name=John&age=30
তাহলে আউটপুট হবে:
Query String: name=John&age=30
POST ডেটা (Form Data) গ্রহণ
CherryPy-তে POST রিকোয়েস্টের মাধ্যমে পাঠানো ডেটা পাওয়ার জন্য cherrypy.request.params ব্যবহার করা হয়। এটি সাধারণত ফর্ম সাবমিট করার সময় ব্যবহৃত হয়।
উদাহরণ:
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return '''
<form method="post" action="/submit">
Name: <input type="text" name="name" /><br>
Age: <input type="text" name="age" /><br>
<input type="submit" value="Submit" />
</form>
'''
@cherrypy.expose
def submit(self, name, age):
return f"Name: {name}, Age: {age}"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে, /submit পাথে ফর্মের মাধ্যমে পাঠানো name এবং age প্যারামিটারগুলো পাওয়ার জন্য submit মেথড ব্যবহার করা হয়েছে।
CherryPy-তে Request Object এবং Query Parameters ব্যবহার করে আপনি HTTP রিকোয়েস্ট সম্পর্কিত সব ধরনের ইনপুট ডেটা খুব সহজে অ্যাক্সেস এবং প্রসেস করতে পারেন। cherrypy.request অবজেক্টটি ওয়েব অ্যাপ্লিকেশনের বিভিন্ন অংশের জন্য প্রয়োজনীয় ডেটা ধারণ করে, এবং Query Parameters ব্যবহার করে আপনি URL থেকে ডাইনামিক ডেটা গ্রহণ করতে পারেন। CherryPy-তে এই দুটি বৈশিষ্ট্য অ্যাপ্লিকেশন ডেভেলপমেন্টে গুরুত্বপূর্ণ ভূমিকা পালন করে।
CherryPy একটি সহজ এবং শক্তিশালী ওয়েব ফ্রেমওয়ার্ক, যা ওয়েব অ্যাপ্লিকেশনের রেসপন্স অবজেক্ট (Response Object) এবং HTTP স্ট্যাটাস কোড ব্যবস্থাপনা করতে অত্যন্ত সুবিধাজনক। CherryPy রেসপন্স অবজেক্ট এবং HTTP স্ট্যাটাস কোডগুলোর মাধ্যমে আপনি সহজে HTTP রেসপন্স কাস্টমাইজ করতে পারেন।
Response Object (রেসপন্স অবজেক্ট)
CherryPy তে রেসপন্স অবজেক্টটি HTTP রেসপন্সের সব তথ্য ধারণ করে, যেমন স্ট্যাটাস কোড, কন্টেন্ট, হেডার ইত্যাদি। রেসপন্স অবজেক্টটি আপনাকে এইসব তথ্য ম্যানিপুলেট করতে, কাস্টম রেসপন্স তৈরি করতে এবং ক্লায়েন্টকে নির্দিষ্ট ডেটা পাঠাতে সহায়তা করে।
CherryPy তে Response Object ব্যবহার
CherryPy তে রেসপন্স অবজেক্ট cherrypy.response এর মাধ্যমে অ্যাক্সেস করা হয়। আপনি cherrypy.response এর বিভিন্ন প্রপার্টি যেমন status, headers, body ইত্যাদি ব্যবহার করে রেসপন্স কাস্টমাইজ করতে পারেন।
উদাহরণ: রেসপন্স অবজেক্ট কাস্টমাইজ করা
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
cherrypy.response.status = "200 OK" # HTTP স্ট্যাটাস কোড সেট করা
cherrypy.response.headers['Content-Type'] = 'text/plain' # হেডার সেট করা
return "এটি একটি কাস্টম রেসপন্স!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
উপরের উদাহরণে, আমরা cherrypy.response.status এর মাধ্যমে HTTP স্ট্যাটাস কোড এবং cherrypy.response.headers এর মাধ্যমে কাস্টম হেডার সেট করেছি।
HTTP Status Codes (HTTP স্ট্যাটাস কোড)
HTTP স্ট্যাটাস কোড HTTP রেসপন্সের অবস্থা জানিয়ে দেয়। এটি ক্লায়েন্ট (যেমন, ব্রাউজার) কে সার্ভারের অবস্থা সম্পর্কে জানানোর কাজ করে। CherryPy তে আপনি কাস্টম HTTP স্ট্যাটাস কোড ব্যবহার করে রেসপন্স তৈরি করতে পারেন।
HTTP স্ট্যাটাস কোড তিনটি মূল ক্যাটেগরিতে ভাগ করা যায়:
- 1xx (Informational): ইনফরমেশনাল কোড, যা প্রক্রিয়াটি চলছে তা জানায়।
- 2xx (Successful): সফল রেসপন্স, যা সফলভাবে রিকোয়েস্ট সম্পন্ন হয়েছে।
- 3xx (Redirection): রিডিরেকশন, যেখানে ক্লায়েন্টকে অন্য URL এ পাঠানো হয়।
- 4xx (Client Error): ক্লায়েন্টের পক্ষ থেকে ভুল, যেমন ভুল রিকোয়েস্ট।
- 5xx (Server Error): সার্ভার সম্পর্কিত সমস্যা।
কিছু সাধারণ HTTP Status Codes:
- 200 OK: রিকোয়েস্ট সফলভাবে সম্পন্ন হয়েছে।
- 201 Created: একটি নতুন রিসোর্স সফলভাবে তৈরি হয়েছে।
- 204 No Content: রিকোয়েস্ট সফল হলেও কোনো কন্টেন্ট নেই।
- 400 Bad Request: রিকোয়েস্ট ভুল ছিল।
- 401 Unauthorized: অথেনটিকেশন প্রয়োজন।
- 403 Forbidden: রিকোয়েস্ট করা রিসোর্সে অ্যাক্সেস নিষিদ্ধ।
- 404 Not Found: রিকোয়েস্ট করা রিসোর্স পাওয়া যায়নি।
- 500 Internal Server Error: সার্ভারে কোনো ত্রুটি হয়েছে।
CherryPy তে HTTP Status Codes সেট করা
CherryPy তে রেসপন্সের HTTP স্ট্যাটাস কোড cherrypy.response.status প্রপার্টির মাধ্যমে সেট করা যায়। আপনি যদি একটি নির্দিষ্ট HTTP স্ট্যাটাস কোড সেট করতে চান, তাহলে আপনি সেটি সরাসরি লিখে দিতে পারেন।
উদাহরণ: 404 Not Found স্ট্যাটাস কোড
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
cherrypy.response.status = 404 # HTTP 404 স্ট্যাটাস কোড সেট করা
return "আপনার পৃষ্ঠাটি খুঁজে পাওয়া যায়নি!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
উপরের উদাহরণে, আমরা cherrypy.response.status কে 404 করে দিয়েছি, যার মানে হল যে রিকোয়েস্ট করা পৃষ্ঠাটি পাওয়া যায়নি।
উদাহরণ: 500 Internal Server Error
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
cherrypy.response.status = 500 # HTTP 500 স্ট্যাটাস কোড সেট করা
return "সার্ভারে কোনো ত্রুটি ঘটেছে!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে, 500 কোড সেট করা হয়েছে যা সার্ভারে কোনো সমস্যা বা ত্রুটি ঘটেছে তা জানায়।
Response Object এবং Status Code ব্যবহারের সুবিধা
- কাস্টমাইজড রেসপন্স: আপনি সহজেই HTTP স্ট্যাটাস কোড এবং হেডার কাস্টমাইজ করতে পারেন।
- ওয়েব সার্ভিস ডেভেলপমেন্টে উপকারী: API তৈরি করতে গেলে কাস্টম HTTP স্ট্যাটাস কোড গুরুত্বপূর্ণ।
- ত্রুটি পরিচালনা: সঠিক HTTP স্ট্যাটাস কোড ব্যবহার করে ত্রুটি সঠিকভাবে পরিচালনা করা যায়।
CherryPy তে রেসপন্স অবজেক্ট এবং HTTP স্ট্যাটাস কোড ব্যবহারের মাধ্যমে আপনি খুব সহজে আপনার অ্যাপ্লিকেশনের রেসপন্স কাস্টমাইজ করতে পারেন। এটি আপনাকে কাস্টম HTTP স্ট্যাটাস কোড সেট করতে, কন্টেন্ট হেডার ম্যানেজ করতে এবং ত্রুটি হ্যান্ডলিং এর জন্য সুবিধা প্রদান করে, যা ওয়েব অ্যাপ্লিকেশন উন্নয়নকে আরো দক্ষ করে তোলে।
CherryPy একটি শক্তিশালী ওয়েব ফ্রেমওয়ার্ক, যা সহজেই JSON এবং XML ফরম্যাটে রেসপন্স তৈরি করতে সহায়তা করে। ওয়েব অ্যাপ্লিকেশনের জন্য JSON বা XML রেসপন্স সাধারণত API ডেভেলপমেন্টে ব্যবহৃত হয়, যেখানে ডাটা স্ট্রাকচারকে একটি নির্দিষ্ট ফরম্যাটে ক্লায়েন্টে পাঠানো হয়।
এখানে JSON এবং XML রেসপন্স তৈরি করার পদ্ধতি আলোচনা করা হবে।
JSON Response তৈরি
JSON (JavaScript Object Notation) একটি সাধারণ ডেটা এক্সচেঞ্জ ফরম্যাট যা মানুষের কাছে পাঠযোগ্য এবং যন্ত্রের দ্বারা সহজে প্রক্রিয়াজ্ঞানযোগ্য।
JSON Response উদাহরণ:
import cherrypy
import json
class MyApp:
@cherrypy.expose
@cherrypy.tools.json_out() # JSON আউটপুট টুল ব্যবহার
def index(self):
data = {
"message": "স্বাগতম CherryPy অ্যাপ্লিকেশনে!",
"status": "success"
}
return data
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে:
@cherrypy.tools.json_out(): এই টুলটি রেসপন্সকে JSON ফরম্যাটে রূপান্তর করে।dataডিকশনারি হিসেবে রাখা JSON ডেটা।
ব্রাউজারে গিয়ে http://127.0.0.1:8080/ এ ঢুকলে নিচের JSON রেসপন্স দেখতে পাবেন:
{
"message": "স্বাগতম CherryPy অ্যাপ্লিকেশনে!",
"status": "success"
}
JSON Response এর Customization
আপনি JSON রেসপন্স কাস্টমাইজ করতে চাইলে json.dumps() ব্যবহার করতে পারেন, যেখানে আপনি পছন্দমতো ফরম্যাট এবং কাস্টম অপশন ব্যবহার করতে পারবেন।
import cherrypy
import json
class MyApp:
@cherrypy.expose
def index(self):
data = {
"message": "স্বাগতম CherryPy অ্যাপ্লিকেশনে!",
"status": "success",
"numbers": [1, 2, 3, 4]
}
cherrypy.response.headers['Content-Type'] = 'application/json'
return json.dumps(data, ensure_ascii=False) # ensure_ascii=False for Bangla characters
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
XML Response তৈরি
XML (eXtensible Markup Language) একটি মার্কআপ ভাষা, যা সাধারণত ডেটা স্টোরেজ এবং ট্রান্সমিশনের জন্য ব্যবহৃত হয়। CherryPy তে XML রেসপন্স তৈরি করতে Python এর xml.etree.ElementTree মডিউল ব্যবহার করা যায়।
XML Response উদাহরণ:
import cherrypy
import xml.etree.ElementTree as ET
class MyApp:
@cherrypy.expose
def index(self):
root = ET.Element("response")
message = ET.SubElement(root, "message")
message.text = "স্বাগতম CherryPy অ্যাপ্লিকেশনে!"
status = ET.SubElement(root, "status")
status.text = "success"
# XML রেসপন্সের হেডার সেট করা
cherrypy.response.headers['Content-Type'] = 'application/xml'
return ET.tostring(root, encoding="utf-8", method="xml").decode()
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে:
xml.etree.ElementTreeমডিউল ব্যবহার করা হয়েছে XML ডকুমেন্ট তৈরি করতে।ET.Elementমূল XML ট্যাগ এবংET.SubElementউপ-ট্যাগ তৈরি করতে ব্যবহৃত হয়েছে।cherrypy.response.headers['Content-Type'] = 'application/xml'XML কনটেন্ট টাইপ হিসেবে সেট করা হয়েছে।
ব্রাউজারে গিয়ে http://127.0.0.1:8080/ এ ঢুকলে নিচের XML রেসপন্স দেখতে পাবেন:
<response>
<message>স্বাগতম CherryPy অ্যাপ্লিকেশনে!</message>
<status>success</status>
</response>
XML Response এর Customization
আপনি XML ডেটা কাস্টমাইজ করতে চাইলে xml.etree.ElementTree এর অন্যান্য ফাংশন যেমন ElementTree এবং SubElement ব্যবহার করতে পারেন।
JSON এবং XML রেসপন্সের মধ্যে পার্থক্য
- JSON:
- পাঠযোগ্য এবং দ্রুত প্রক্রিয়াজ্ঞানযোগ্য।
- সাধারণত ওয়েব এবং মোবাইল অ্যাপ্লিকেশনে ব্যবহৃত হয়।
- ফাইল এক্সটেনশন:
.json - Content-Type:
application/json
- XML:
- তথ্য স্টোরেজ এবং ডেটা এক্সচেঞ্জের জন্য ব্যবহৃত হয়।
- ফাইল এক্সটেনশন:
.xml - Content-Type:
application/xml
CherryPy দিয়ে আপনি সহজেই JSON এবং XML রেসপন্স তৈরি করতে পারেন, যা ওয়েব API বা ডেটা এক্সচেঞ্জের জন্য খুবই উপকারী। JSON সাধারণত আধুনিক ওয়েব অ্যাপ্লিকেশনে ব্যবহৃত হয়, যেখানে XML সাধারণত ডেটা সংরক্ষণ এবং পুরানো সিস্টেমের মধ্যে যোগাযোগের জন্য ব্যবহৃত হয়। CherryPy এর সাহায্যে আপনি উভয় ফরম্যাটে ডেটা রেসপন্স তৈরি এবং পাঠাতে সক্ষম।
CherryPy দিয়ে ওয়েব অ্যাপ্লিকেশন তৈরির সময় ফাইল আপলোড এবং ডাউনলোড ব্যবস্থাপনা একটি গুরুত্বপূর্ণ বিষয়। CherryPy সহজে ফাইল আপলোড এবং ডাউনলোড করার জন্য সমর্থন প্রদান করে। এখানে আমরা দেখব কিভাবে CherryPy তে ফাইল আপলোড এবং ডাউনলোড পরিচালনা করা যায়।
CherryPy তে ফাইল আপলোড
CherryPy তে ফাইল আপলোড করতে cherrypy.request.params এবং cherrypy.request.files ব্যবহার করা হয়। ফাইল আপলোডের জন্য একটি HTML ফর্ম তৈরি করতে হবে যেখানে enctype="multipart/form-data" ব্যবহৃত হবে।
উদাহরণ: ফাইল আপলোড
- HTML ফর্ম (upload.html):
<!DOCTYPE html>
<html>
<head>
<title>ফাইল আপলোড</title>
</head>
<body>
<h1>ফাইল আপলোড ফর্ম</h1>
<form action="/upload" method="post" enctype="multipart/form-data">
<label for="file">ফাইল নির্বাচন করুন:</label>
<input type="file" name="file" id="file">
<input type="submit" value="আপলোড">
</form>
</body>
</html>
- CherryPy অ্যাপ্লিকেশন (app.py):
import cherrypy
import os
class FileUploadApp:
@cherrypy.expose
def index(self):
return open("upload.html")
@cherrypy.expose
def upload(self, file):
upload_path = "./uploads"
if not os.path.exists(upload_path):
os.makedirs(upload_path)
file_path = os.path.join(upload_path, file.filename)
with open(file_path, 'wb') as f:
f.write(file.file.read())
return f"ফাইল '{file.filename}' সফলভাবে আপলোড করা হয়েছে!"
if __name__ == '__main__':
cherrypy.quickstart(FileUploadApp())
কোড ব্যাখ্যা:
- HTML ফর্ম: ব্যবহারকারীর কাছ থেকে ফাইল নিতে একটি ফর্ম তৈরি করা হয়েছে।
- CherryPy অ্যাপ: ফাইলটি
uploadমেথডে প্রসেস করা হচ্ছে, যেখানে ফাইলটিকেuploadsফোল্ডারে সংরক্ষণ করা হচ্ছে। file.filename: আপলোড করা ফাইলের নাম।file.file.read(): ফাইলটি পড়েuploadsফোল্ডারে সংরক্ষণ করা হচ্ছে।
CherryPy তে ফাইল ডাউনলোড
CherryPy তে ফাইল ডাউনলোড করতে, আপনি cherrypy.lib.static.serve_file() ব্যবহার করতে পারেন, যা ফাইলটি সরাসরি সার্ভার থেকে ক্লায়েন্টে পাঠায়।
উদাহরণ: ফাইল ডাউনলোড
- CherryPy অ্যাপ্লিকেশন (app.py):
import cherrypy
import os
from cherrypy.lib.static import serve_file
class FileDownloadApp:
@cherrypy.expose
def index(self):
return '''<html>
<body>
<h2>ফাইল ডাউনলোড</h2>
<a href="/download/sample.txt">sample.txt ডাউনলোড করুন</a>
</body>
</html>'''
@cherrypy.expose
def download(self, filename):
file_path = os.path.join('./downloads', filename)
if os.path.exists(file_path):
return serve_file(file_path, "application/octet-stream", download=True)
else:
return "ফাইলটি পাওয়া যায়নি।"
if __name__ == '__main__':
cherrypy.quickstart(FileDownloadApp())
- ফাইল
downloads/ফোল্ডারে সেভ করুন:
project/
│
├── app.py
└── downloads/
└── sample.txt
কোড ব্যাখ্যা:
/download/sample.txtURL এ ক্লিক করলে,sample.txtফাইলটি ডাউনলোড হবে।serve_file(): এটি ফাইলটি ডাউনলোড করার জন্য CherryPy এর বিল্ট-ইন টুল।download=True: এটি ফাইলটিকে ডাউনলোডের জন্য প্রস্তুত করে।
কাস্টম ফাইল আপলোড এবং ডাউনলোড সেটিংস
ফাইল আপলোড এবং ডাউনলোডের জন্য CherryPy তে কিছু কাস্টম সেটিংস করা যেতে পারে, যেমন:
- ফাইল সাইজ লিমিট: ফাইল আপলোডের আকার সীমিত করা।
- ফাইল টাইপ চেক: শুধুমাত্র নির্দিষ্ট ফাইল টাইপ (যেমন:
.jpg,.png) আপলোড করার অনুমতি দেওয়া।
উদাহরণ: ফাইল সাইজ লিমিট এবং ফাইল টাইপ চেক
import cherrypy
import os
class FileUploadApp:
@cherrypy.expose
def index(self):
return '''<html>
<body>
<h2>ফাইল আপলোড</h2>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="আপলোড" />
</form>
</body>
</html>'''
@cherrypy.expose
def upload(self, file):
max_file_size = 1048576 # 1MB
allowed_extensions = ['jpg', 'jpeg', 'png']
# ফাইল সাইজ চেক
if file.length > max_file_size:
return "ফাইলটি খুব বড়, সর্বোচ্চ সাইজ 1MB।"
# ফাইল এক্সটেনশন চেক
file_extension = file.filename.split('.')[-1].lower()
if file_extension not in allowed_extensions:
return f"এই ধরনের ফাইল ({file_extension}) আপলোড করা যাবে না।"
upload_path = "./uploads"
if not os.path.exists(upload_path):
os.makedirs(upload_path)
file_path = os.path.join(upload_path, file.filename)
with open(file_path, 'wb') as f:
f.write(file.file.read())
return f"ফাইল '{file.filename}' সফলভাবে আপলোড করা হয়েছে!"
if __name__ == '__main__':
cherrypy.quickstart(FileUploadApp())
কোড ব্যাখ্যা:
- ফাইল সাইজ চেক: আপলোড হওয়া ফাইলের সাইজ চেক করে যদি তা 1MB এর বেশি হয় তবে একটি মেসেজ দেখানো হবে।
- ফাইল এক্সটেনশন চেক: শুধুমাত্র
.jpg,.jpeg,.pngধরনের ফাইল আপলোড করা যাবে।
CherryPy তে ফাইল আপলোড এবং ডাউনলোড খুবই সহজ এবং কার্যকরী। CherryPy এর cherrypy.request.files এবং cherrypy.lib.static.serve_file() ব্যবহার করে আপনি ওয়েব অ্যাপ্লিকেশনে ফাইল আপলোড এবং ডাউনলোড পরিচালনা করতে পারবেন। এছাড়াও, CherryPy কাস্টম কনফিগারেশন সেটিংস দিয়ে ফাইল সাইজ এবং টাইপ সীমাবদ্ধতা, ফাইল স্টোরেজ ব্যবস্থা, এবং অন্যান্য নিরাপত্তা ফিচার যোগ করা সম্ভব।
Read more