Saturday, August 27, 2011

Mapping URL dengan CherryPy


Salah satu alasan yang membuat saya tertarik menggunakan CherryPy adalah kesederhanaannya, sederhana yang saya maksud di sini adalah CherryPy tidak memerlukan terlalu banyak file konfigurasi baik untuk mapping url maupun dalam penggunaan databasenya karena hanya menggunakan satu file konfigurasi dengan ekstensi '*.conf' yang kita letakan pada root directory.

Tulisan ini hanya akan menjelaskan sedikit tentang 'mapping url' saat kita menggunakan 'nested link' url pada aplikasi web yang kita buat. Dengan Django, saat kita membuat atau menentukan url atau link untuk tiap halaman aplikasi yang kita buat harus didefinisikan terlebih dahulu pada file konfigurasi 'urls.py'.

Dengan CherryPy, mapping url diberikan langsung pada source code aplikasi yang kita buat hanya dengan mendefinisikan object dari kelas-kelas yang akan digunakan, contohnya seperti berikut :

root = HomePage()

Dari baris di atas, kita mendefinisikan variabel 'root' menjadi object dari kelas 'HomePage' yang akan kita tetapkan sebagai root url dan akan menghasilkan url 'http://localhost/'

Sedangkan untuk membuat mendapatkan url yang berada dibawah root misalnya http://localhost/joke/ maka kita dapat mendefinisikannya seperti berikut ini (perhatikan object 'joke' yang kita tetapkan sebagai object dari kelas 'JokePage'):

root.joke = JokePage()

Kita juga dapat membuat url yang berada dibawah 'joke' misalnya http://localhost/joke/funny/ cukup dengan menambahkan object 'funny' dari kelas 'FunnyJoke' setelah object 'root.joke' seperti berikut :

root.joke.funny = FunnyJoke()

Saat menerima url, CherryPy akan memecah url berdasarkan komponen path '/' untuk menentukan object dan fungsi mana saja yang digunakan dan akan membaca semua object hingga object urutan yang paling belakang sampai tidak ditemukan object lagi.

Contoh-contoh di atas bila dituangkan dalam program maka dapat kita buat seperti dibawah ini :

import cherrypy

class HomePage:
    def index(self):
          return “Ini adalah halaman depan”
    index.exposed = True

class JokePage:
    def index(self):
          return “Halaman ini berisi lelucon”
    index.exposed = True

class FunnyJoke:
    def index(self):
          return “Halaman ini berisi lelucon yang paling lucu”
    index.exposed = True

root = HomePage()
root.joke = JokePage()
root.joke.funny = FunnyJoke()

cherrypy.tree.mount(root, config="config.conf")

Sebuah url juga dapat di mapping atau didefinisikan di dalam sebuah kelas, misalnya kita akan mendefinisikan url http://localhost/joke/funny/ , karena object funny berada dibawah joke maka kita akan mendefinisikannya di dalam kelas JokePage. Berikut contohnya ;

class JokePage:
    def __init__(self):
          self.funny = FunnyJoke()
    def index(self):
          return “Halaman ini berisi lelucon”
    index.exposed = True

mudah bukan, silahkan mencoba :)

No comments: