Django Tutorial 5 : View dan UrlConf

  Pada Tutorial yang sebelumnya, kita sempat bersinggungan dengan 2 file yang akan jadi topik pembahasan kita saat ini, yakni views.py dan urls.py.

File views.py dirancang untuk menampung bisnis-logic kita. File ini bekerja di level applikasi (*tutorial ke 3), setiap kita membuat applikasi didalam instance django, maka kita akan mendapatkan 1 file view ini. Didalam file ini kita menuliskan fungsi2 atau prosedur2 applikasi kita. Setiap fungsi inilah yang disebut sebagai suatu view. Seperti yang dicontohkan didalam tutorial ke 4 point 5, disitu kita mendaftarkan fungsi index.

def index(request):
# return HttpResponse("Hello, world. You're at The Project PAWANG index page.")
t = loader.get_template('core/index.html')
c = Context({"name" : "test"})
return HttpResponse(t.render(c))

File urls.py dirancang untuk mengatur konfigurasi request url kita. File urls.py ini bekerja di level instance. Jadi setiap kali kita membuat applikasi yang baru (*tutorial ke 3), kita akan memakai file urls.py yang sama. Seperti yang dicontohkan dalam tutorial ke 4 point 4, disitu kita mendaftarkan virtual directory site_media ke dalam file urls.py. Sehingga setiap request site_media/ akan di tangani oleh fungsi django.views.static.serve.

(r'^site_media/(?P.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),

Nah kedua file ini, urls.py dan views.py, akan dipergunakan oleh seluruh modul yang kita buat. Semisal kita akan membangun modul Sales, Purchasing, Inventory, Accounting, CMS, Blog dan berbagai modul yang lain, kita harus mendaftarkan semua pattern url atau virtual directory ke dalam satu file urls.py dan kita harus menuliskan semua fungsi insert, delete, update, search, print dan berbagai fungsi yang lain kedalam file satu views.py. Tentu hal ini akan menyulitkan kita dalam bekerja. Satu file dipergunakan untuk semua module.

Nah, yang kita perlukan adalah membuat kedua file itu lebih user friendly, lebih moduler, lebih gampang di maintenance.

Tutorial :

  1. Buka file urls.py dan perhatikan baris yang sudah kita tulis sebelumnya :
    (r'^$', 'pawang.core.views.index')Arti perintah tersebut adalah sebagai berikut “Semua request url dengan awalan / di tangani oleh fungsi index di dalam file views.py di dalam direktori pawang/core”.
  2. kemudian tambahkan baris perintah seperti berikut :
    (r'^core/', include('core.urls'))Arti perintah tersebut adalah sebagai berikut “Semua request url yang dimulai dengan core/ akan memakai file urls.py di dalam direktory pawang/core atau didalam direktori applikasi core”. Jadi jikalau ada request url yang dimulai dengan core/abcd atau core/xyz, maka request itu akan di arahkan ke file core.urls.py.
  3. Masuk ke dalam direktori pawang/core dan buat file urls.py dan copy paste perintah berikut :
    from django.conf.urls.defaults import *
    from django.views.generic.simple import direct_to_template
    
    # this is 'core.urls'
    
    urlpatterns = patterns('core.views',
        url(r'^menu/(\d{1,2})/(\d{1,2})/$', 'menu.index'),
        url(r'^currency/(\d{1,2})/(\d{1,2})/$', 'currency.index'),
    )
    

    Nah perhatikan baris perintah berikut :

    urlpatterns = patterns('core.views',
    url(r'^menu/(\d{1,2})/(\d{1,2})/$', 'menu.index'),

    Arti perintah tersebut adalah sebagai berikut “Semua request url yang dimulai dengan core/menu/ akan ditangani oleh fungsi index didalam file menu.py di dalam direktori pawang/core/views dengan format request /core/menu/desimal max 2 digit/ desimal max 2 digit”.

    Contoh requestnya seperti ini /core/menu/0/0 atau kombinasi maksimum 2 digitnya adalah /core/menu/99/99

  4. Dari point diatas dinyatakan bahwasannya file menu.py ada di dalam direktori /pawang/core/views yang mana kita belum memiliki direktori tersebut. Yang ada di dalam direktori /pawang/core adalah file views.py yang mana file ini akan berisi fungsi fungsi dari setiap modul yang ada di applikasi core.
    Kita akan memecah fungsi fungsi yang akan kita buat menjadi lebih moduler agar lebih mudah dimaintain.
    Jalankan perintah perintah berikut :

    $ cd pawang/core
    $ mkdir views
    $ mv views.py views/based.py

    Kita buat direktori views didalam direktori /pawang/core dan kita pindahkan file views.py ke dalam direktori views dan kita ubah namanya menjadi based.py.
  5. Pemindahan file views.py menjadi based.py akan mengakibatkan request url kita akan error. Coba perhatikan point 1 diatas. Berarti kita harus merubah file urls.py yang ada di instance django tersebut akan sesuai dengan perubahan terakhir yang kita lakukan.Buka file urls.py dan ubah perintahnya sebagai berikut :
    (r'^$', 'pawang.core.views.based.index')

    Nah sekarang arti perintah tersebut adalah sebagai berikut “Semua request url dengan awalan / di tangani oleh fungsi index di dalam file based.py di dalam direktori pawang/core/views”.

  6. Berikut adalah isi file urls.py di instance django atau di direktori pawang :
    from django.conf.urls.defaults import *
    from django.conf import settings
    # Uncomment the next two lines to enable the admin:
    # from django.contrib import admin
    # admin.autodiscover()
    
    urlpatterns = patterns('',
        # Example:
        # (r'^pawang/', include('pawang.foo.urls')),
    
        # Uncomment the admin/doc line below and add 'django.contrib.admindocs'
        # to INSTALLED_APPS to enable admin documentation:
        # (r'^admin/doc/', include('django.contrib.admindocs.urls')),
    
        # Uncomment the next line to enable the admin:
        # (r'^admin/', include(admin.site.urls)),
    
        (r'^$', 'pawang.core.views.based.index'),
        (r'^core/', include('core.urls')),
        (r'^site_media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
    )
    
  7. Buka internet browser anda, dan arahkan ke alamat http://localhost:8000/. Jika anda bisa melihat tulisan Hello World lagi, Selamat anda sudah berhasil dalam tutorial ke lima ini.

Author: Nareswara

Ordinary People with eye glasses

Leave a Reply

Your email address will not be published. Required fields are marked *