Thursday, November 19, 2009

Membuat applikasi baru di dalam pinax

So, setelah kita belajar meng-install pinax, berikutnya adalah membuat applikasi di dalam pinax.
Step nya sebagai berikut :

1. Kita start dulu website "mysite" yang sudah kita buat dengan pinax. Diartikel terdahulu, kita membuat project "mysite" ini berbasis "social-project". Mari kita start webserver "my-site" kita.

(pinax-env)$ cd mysite
(pinax-env)$ python manage.py runserver

2. Setelah server kita bisa di start, kita lihat di web-browser kita di http://localhost:8000, dan mari kita coba untuk login.

3. Nah setelah kita bisa login, maka kita akan melihat deretan tab di bagian atas. Ada profile, photos, blogs, tribes dan seterusnya. Di deretan tab inilah kita akan mencoba untuk membuat applikasi kita. Jadi kita buat Tab applikasi kita, "my_app". Untuk itu kita harus edit file templates/site_base.html dan tambahkan kode dibawah ini di area dimana tab-tab tersebut di daftarkan. Setelah itu file kita save.

 <li id="tab_my_app">{% trans "My App" %}</li>

4. Refresh web-browser anda. Nah seharusnya sekarang muncul tab baru yang ber-title "My App". Nah ini kita baru saja mendaftarkan applikasi kita di halaman pinax. Itu adalah link-nya. Applikasinya sendiri harus kita buat terlebih dahulu. Untuk itu kita perbaharui dulu syntax di point-3 tersebut menjadi berikut :

 <li id="tab_my_app"><a href="{% url my_app_index %">{% trans "My App" %} </a> </li>

Nah sintak tersebut akan terbaca "applikasi kita bernama my_app, kita registrasikan tab-nya dengan nama tab_my_app, dengan title My App, jika di click dia akan mencari url dengan alamat my_app_index".

5. Nah alamat url "my_app_index" tersebut berada dimana  ? tentu saja dia harus berada didalam applikasi my_app kita. Mari kita buat applikasi kita di dalam pinax terlebih dahulu, dengan sintak :

(pinax-env)$ python manage.py startapp my_app

7. Sayangnya applikasi my_app ini tidak berada di dalam directory apps, sehingga akan mengurangi kerapian dari project ini. Mari kita pindah directory my_app ke dalam directory apps.

(pinax-env)$ mv my_app/ apps

8. Nah applikasi yang telah kita buat tersebut harus kita daftarkan ke dalam file daftar alamat url di pinax. Kita edit file urls.py milik pinax dan kita tambahkan baris perintah dibawah ini di area urlpatterns :

(r'^my_app/', include('my_app.urls')),

9. Sintak diatas itu akan terbaca seperti berikut "Apabila ada yang mencari alamat applikasi my_app, coba baca juga dari file urls milik applikasi my_app".  Saat ini kita masih belum memiliki file urls.py di dalam direktory my_app, jadi mari kita buat file urls.py di dalam directory my_app dan berisikan sintak sintak sebagai berikut :

from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template

urlpatterns = patterns('', url(r' ^$', direct_to_template, {"template": "my_app/index.html"}, name="my_app_index" ),
)

10. Nah dari sintak diatas terlihat bahwasannya alamat url my_app_index itu akan menggunakan tempat "index.html" yang berada di directory template. Saat ini kita tidak memiliki directory my_app di dalam directory template jadi kita harus membuatnya terlebih dahulu dengan sintak sebagai berikut :

(pinax-env)$ mkdir templates/my_app

11. Setelah itu kita buat file index.html di dalam directory template my_app, dan berisikan sintak sintak html seperti di bawah ini :

{% extends "site_base.html" %}

{% load i18n %}

{% block head_title %}{% trans "My App" %}{% endblock %}

{% block body %}
    {% blocktrans %}
        <p>Ini testing, UI Interface kita harus kita buat di file ini. </p>
    {% endblocktrans %}
{% endblock %}

12. Setelah itu kita kembali ke web-browser kita, kita refresh homepage-nya pinax, dan kita klik tab "My App" atau address bar kita isi http://localhost:8000/my_app/

Nah sekarang kita sudah bisa membuat applikasi kita, dan kita sudah mendaftarkannya di dalam pinax.


Thursday, November 05, 2009

Solusi composite primay key di Django

Mahalo, akhirnya setelah berkutat kesana kemari dengan ORM Django, akhirnya dapat juga solusi untuk mengatasi Composite Primary Key di Django. Django ORM menganut paham active_record, yang salah satu featurenya ada "1 kolom sebagai primary key" dalam suatu tabel. Persyaratan ini merupakan keharusan dalam sistem ORM Django.

Hal ini akan menimbulkan masalah pada saat kita akan memakai Django untuk sistem yang telah berjalan / legacy system, karena design tabel database di sistem tersebut banyak yang menggunakan composite key, atau lebih dari satu kolom sebagai primary key-nya.
Sebagai contoh kita ambil tabel kota, maka composite key nya adalah (kode_negara, kode_kota).

Nah solusi yang saya tawarkan adalah sebagai berikut :
  • buat satu kolom baru didalam tabel yang anda inginkan, dan jadikan kolom ini sebagai target untuk membuat primary key yang baru


    • alter table kota add column kota_id


  • kemudian di function save dari class model kota tersebut kita tambahkan perintah yang akan mengisi kolom kota_id dengan gabungan dari kolom kode_negara dan kode_kota


    • def save(self):
              if not self.kota_id:
                  self.kota_id = "%s%s" % (self.kode_negara, self.kode_kota)
                  super(Kota, self).save()



  • Kemudian pada saat save_edit, kita juga harus memastikan kolom primary key ini tidak ikut diubah oleh sistem.
Solusi yang saya tawarkan ini memang tidak 100% membuat saya puas, tetapi ini yang menurut saya terbaik saat ini. Dengan cara seperti ini, sistem yang sudah ada hanya perlu di ubah sedikit saja, tanpa merusak sistem yang lama.