Static এবং Dynamic Routes কনফিগার করা

Routing এবং URL Mapping - চেরিপাই (CherryPy) - Web Development

251

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 কনফিগারেশন কৌশল

  1. Path Variables: CherryPy তে আপনি URL পাথের মধ্যে পরিবর্তনশীল অংশ (path variables) ব্যবহার করতে পারেন। যেমন /user/{user_id} পাথের মাধ্যমে ইউজারের আইডি অ্যাক্সেস করা।
  2. Regular Expressions: আপনি URI কনফিগারেশনে নিয়মিত অভিব্যক্তি (Regular Expressions) ব্যবহার করে ডায়নামিক রুট প্রক্রিয়া করতে পারেন।
  3. Nested Routes: CherryPy তে নেস্টেড রুটও কনফিগার করা যায়। অর্থাৎ একটি রুটের মধ্যে অন্য রুটকে সংজ্ঞায়িত করা।

CherryPy তে Static এবং Dynamic Routes কনফিগার করা খুবই সহজ এবং শক্তিশালী। Static routes এর মাধ্যমে আপনি স্ট্যাটিক ফাইল যেমন CSS, JS, ইমেজ সরবরাহ করতে পারেন, আর Dynamic routes এর মাধ্যমে আপনি URL পাথ থেকে প্যারামিটার নিয়ে ডায়নামিক কনটেন্ট রেন্ডার করতে পারেন। CherryPy এর এই ক্ষমতা আপনাকে আরও উন্নত এবং স্কেলযোগ্য ওয়েব অ্যাপ্লিকেশন তৈরি করতে সহায়তা করবে।

Content added By
Promotion

Are you sure to start over?

Loading...