Random Primary Key Model di Django

Kadang-kadang ada saatnya kita memerlukan huruf atau angka acak untuk dijadikan sebagai ID atau Primary Key data kita di database.

Dalam beberapa kasus kemungkinan penggunaannya adalah sebagai berikut (berdasarkan pengalaman pribadi):

  1. Keamanan, meskipun bukan 100% menjamin keamanan tetapi paling tidak melindungi sistem kita dari pengguna untuk menebak-nebak url dimana kalau tidak ditangani dengan benar bisa berbahaya.
  2. Terekspose secara public melalui API, apabila anda pernah menggunakan Django Tastypie atau Django Rest Framework maka routing URL nya akan kira-kira seperti ini : mydomain.com/api/messages/120/, dan pada beberapa kasus saya pribadi ingin URL nya seperti ini mydomain.com/api/messages/YQSRq7f5/.

Misalkan kita ingin menghasilkan url dengan format seperti ini: mydomain.com/download/YQSRq7f5/. Dalam prakteknya ada beberapa cara untuk itu, dan yang pertama adalah dengan membuat sebuah field baru di Model Django dan kita generate nilai acak ini sebelum disimpan ke database, biasanya kita override method save() dari model untuk proses ini.

Namun perlu juga kita perhatikan bahwa nilai ini harus unique (nilainya tidak boleh sama dengan yang sudah ada), dan ini juga bukan proses sesederhana yang kita bayangkan.

Dan cara kedua adalah dengan benar-benar meng-generate nilai acak untuk ID nya sendiri, dimana pada penggunaan Django sehari-hari kita jarang sekali mengutak-atik field ID di model, karena biasanya di tangani otomatis oleh Django.

Dengan cara kedua diatas kita tidak perlu membuat field tambahan lagi, cuma memang perlu perhatian khusus tentang bagaimana kita bisa mengganti ID yang biasanya bernilai Integer kita jadikan type Char dan acak dengan panjang tertentu.

Namun bagi anda yang sedang menemui kasus seperti diatas, kita bisa menggunakan sebuah modul django-randomprimary dari jbrendel (Brendel Consulting) https://github.com/jbrendel/django-randomprimary.

Modul ini persis melakukkan seperti cara kedua yang saya sebutkan diatas, yaitu dengan membuat sebuah class abstrak dari Model dan nanti setiap Model yang kita buat harus merupakan subClass dari class ini. Namun karena modul ini bukan sebuah aplikasi django jadi penggunaanya tinggal pakai file random_primary.py secara langsung di projek kita.

Pengunaannya kira-kira seperti ini:

#file: models.py

from django import models
from random_primary import RandomPrimaryIdModel

class Message(RandomPrimaryIdModel):
    title = models.CharField('Title', max_length=250)
    content = models.TextField('Message content')

Jadi dengan cara diatas, setiap kali kita membuat Message baru maka akan memiliki ID Unique dan acak dengan panjang yang bisa kita atur sebelumnya.

Untuk mengatur panjang ID dan pengaturan lainnya bisa langsung baca dokumentasinya ya, cukup sederhana dan mudah dipakai.

Leave a Reply

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