Deep Dive Pydantic: Rahasia Membuat Kode Python Lebih Bersih dan Terstandar

Subscribe dengan Account Google untuk mendapatkan News Letter terbaru dari Halovina !
Deep Dive Pydantic: Rahasia Membuat Kode Python Lebih Bersih dan Terstandar

Apakah Anda sering merasa lelah menulis berbaris-baris kode if-else hanya untuk memastikan data input user sudah benar?


Atau mungkin Anda pernah mengalami bug fatal karena tipe data yang masuk tidak sesuai harapan (misalnya string "100" alih-alih integer 100)?


Jika iya, maka Anda perlu berkenalan dengan Pydantic. Dalam ekosistem Python modern, terutama jika Anda menggunakan framework seperti FastAPI. Pydantic adalah standar emas untuk data parsing dan validasi.


Artikel ini akan membahas jantung dari library ini: BaseModel. Kita akan membedah bagaimana BaseModel bekerja, cara menggunakannya, hingga menangani error validasi.



Apa Itu Pydantic BaseModel?


Secara sederhana, Pydantic adalah library Python untuk validasi data menggunakan type hinting (petunjuk tipe). Inti dari Pydantic adalah sebuah class bernama BaseModel.


Ketika Anda membuat sebuah class yang mewarisi (inherit) BaseModel, Pydantic akan secara otomatis:



  1. Memvalidasi tipe data: Memastikan data yang masuk sesuai dengan tipe yang didefinisikan.




  2. Melakukan Parsing (Coercion): Mengubah tipe data jika memungkinkan (contoh: string "18" diubah otomatis menjadi integer 18).




  3. Memberikan Error yang Jelas: Memberitahu field mana yang salah dan kenapa.




Tahap 1: Instalasi


Sebelum memulai, pastikan Anda sudah menginstal Pydantic di virtual environment Anda. Seperti yang dijelaskan dalam video referensi, Anda bisa menginstalnya via pip.


Jika Anda membutuhkan validasi email, Anda bisa menambahkan dependensi email sekaligus.


[codesyntax lang="bash"]

pip install pydantic
# Atau jika butuh validasi email:
pip install "pydantic[email]"

Tahap 2: Membuat Model Data Pertama Anda


Mari kita praktikkan cara membuat model. Anggap saja kita sedang membuat sistem pendaftaran user (UserRequestModel). Kita ingin memastikan user mengisi nama, umur, dan password dengan benar.


Berikut adalah contoh implementasi BaseModel dengan validasi ketat menggunakan Field:


from pydantic import BaseModel, Field, field_validator
from typing import Optional

class UserRequestModel(BaseModel):
username: str
first_name: str = Field(min_length=2) # Minimal 2 huruf
last_name: str
age: int = Field(gt=17) # Harus di atas 17 tahun (18+)
bio: Optional[str] = None
password: str
confirm_password: str

# Custom Validator: Memastikan password cocok
@field_validator('confirm_password')
@classmethod
def password_match(cls, v: str, info):
if 'password' in info.data and v != info.data['password']:
raise ValueError('Password tidak cocok!')
return v


Bedah Fitur pada Kode di Atas:




  • Field(min_length=2): Memastikan first_name tidak boleh satu huruf saja.




  • Field(gt=17): Greater Than 17. Validasi ini memastikan user harus berusia minimal 18 tahun.




  • @field_validator: Fitur canggih Pydantic untuk membuat aturan validasi sendiri. Di sini kita menggunakannya untuk mengecek apakah password dan confirm_password sama persis.




Tahap 3: Validasi JSON Data (Parsing)


Salah satu kegunaan utama Pydantic adalah memvalidasi data JSON yang masuk, misalnya dari API request.


Di Pydantic V2, kita bisa menggunakan method model_validate_json() untuk membaca string JSON dan mengubahnya menjadi objek Python yang aman.


Mari kita lihat apa yang terjadi jika kita memasukkan data yang salah.

Skenario: Data Salah (Error Handling)


Misalkan kita memiliki file JSON data_salah.json dengan konten:



  • first_name: "A" (Terlalu pendek, minimal 2)




  • age: 15 (Terlalu muda, harus > 17)




Kita bisa menjalankan validasi dengan blok try...except untuk menangkap ValidationError:


from pydantic import ValidationError

json_data_salah = """
{
"username": "johndoe",
"first_name": "A",
"last_name": "Doe",
"age": 15,
"password": "secret",
"confirm_password": "secret"
}
"""

try:
user = UserRequestModel.model_validate_json(json_data_salah)
print("Data Valid!")
except ValidationError as e:
print("Terjadi Kesalahan Validasi:")
print(e)



Output Error: Pydantic akan memberikan laporan error yang sangat detail. Ia akan memberi tahu bahwa:



  1. first_name: String should have at least 2 characters.




  2. age: Input should be greater than 17.




Skenario: Data Benar


Jika data sudah diperbaiki (first_name jadi "Andi" dan age jadi 20), method model_validate_json akan sukses membuat objek user. Anda kemudian bisa mengekspornya kembali menjadi dictionary menggunakan method model_dump().


# Jika data benar
print(user.model_dump())
# Output: {'username': 'johndoe', 'first_name': 'Andi', ...}

Kesimpulan


Menggunakan Pydantic BaseModel jauh lebih efisien daripada menulis validasi manual. Kode Anda menjadi lebih bersih, mudah dibaca, dan standar. Fitur ini sangat krusial terutama jika Anda bekerja dengan framework modern seperti FastAPI atau membangun microservices yang saling bertukar data JSON.


Poin Penting untuk diingat:



  • Gunakan BaseModel sebagai induk class data Anda.




  • Manfaatkan Field untuk validasi dasar (panjang karakter, nilai minimum/maksimum).




  • Gunakan @field_validator untuk logika validasi yang kompleks.




  • Gunakan model_validate_json untuk memparsing data JSON.