Model Object Mapper, ya da kısaca MOM, veritabanı girdilerini sabit dosyalar üzerinden ekleyip güncelleyen bir Django komut satırı aracıdır. İlişkisel alanları (relational fields) destekler ve Django uygulamaları ile değişiklik gerektirmeden kullanılabilir. MIT Lisansı ile lisanslanmış, özgür ve açık kaynaktır.
Giriş
MOM kişisel veya gizli veri setleriyle uğraştığınız son kullanıcı dostu girdi gerektirmeyen iş akışınızın verimini arttırır. Her çalıştırdığınızda veritabanınızı eşitleyen kullanması kolay bir serileştirme mekanizması sağlar.
Kullanımı
Bu bölüm MOM'un en yararlı özelliklerin bazılarını açıklamaktadır. Her şeyi detaylıca anlatan kullanım kılavuzunu ve hızlı başlangıç rehberini burada bulabilirsiniz:
Modellere Dayalı Modelleme
MOM'un Django modellerimizi tanıması için ilk önce Ana MOM Dosyası denilen dosya içinde onları nasıl kullanacağımızı belirtiyoruz. O dosyayla hangi dosyaların hangi modellere işaret ettiğini ve ilişkili alanları nasıl ele alacağımızı MOM'a anlatıyoruz.
Konuyu açıklamak için, aşağıdaki modele sahip olduğumuzu varsayalım:
# Dosya: home/models.py
from django.db import models
class Post(models.Model):
slug = models.SlugField(primary_key=True, )
title = models.CharField(max_length=100, )
date = models.DateTimeField()
content = models.TextField()
Şimdi, Ana MOM Dosyası içinde şunları yapabilirsiniz:
# Dosya: mom_data/mom.yaml
mom:
map:
post:
model: home.models.Post
lookupField: slug
Burada mom
anahtarı içindeki map
anahtarı MOM'a home.models.Post
modelini nasıl ele alması gerektiğini söyleyen post
anahtarını tanımlamaktadır. Bunu takiben, MOM, adları post
ile başlayan ve home.models.Post
modelinin slug
alanına atanacak değerle devam eden ve son olarak MOM dosya formatı ile biten dosyaları bulur. Bu üç değeri bir araya getirdiğimizdeyse söyle bir şey elde ederiz: post.slug-alani-degeri.mom.yaml
.
Nesnelerin İçi
Bir Ana MOM Dosyası oluşturduğumuza göre artık nesnelere (veya serileştirme dosyalarına) odaklanabiliriz. Bu dosyalar içerisinde veritabanı satırlarını hem oluşturmak hem de değiştikçe güncellemek için çok basit bir şekilde temsil edeceğiz.
Şimdi bahsettiğimiz post.slug-alani-degeri.mom.yaml
dosyasını oluşturduğumuzu varsayalım:
# Dosya: mom_data/post.slug-alani-degeri.mom.yaml
field:
title: Harika Bir Gönderi
date: 2021-02-23 10:25:00+3
content: Bu harika bir gönderidir
Beklendiği üzere, slug
alanın değeri dosya adından geldiği için slug-alani-degeri
'dir.
Şimdi şunu çalıştırabilirsiniz:
$ ./manage.py mom
Sonuç olarak, MOM mevcut bir satırı sorgulamak için slug
alanını ve değerini kullanacak ve eğer varsa, MOM, alanları değişiklikleri bulmak için karşılaştıracak ve bir değişiklik varsa satırı güncelleyecektir. Mevcut bir satır yoksa, MOM veritabanında yeni bir satır oluşturacaktır.
Burada kullanabileceğiniz bir kullanışlı özellik de, alan adından sonra bir boşluk ekleyerek etkinleştirebileceğiniz seçeneklerdir. Örneğin, bir markdown dosyasıyla çalışıyorsanız ve onu content
alanı için değer olarak kullanmak istiyorsanız şunu yapabilirsiniz:
# Dosya: mom_data/post.slug-alani-degeri.mom.yaml
field:
# ...
content file: content.md
ve content.md
dosyası içerisinde:
[comment]: # Dosya: mom_data/content.md
Bu harika bir gönderidir.
Bu şekilde YAML dosyalarının haricinde farklı dosya biçimleriyle de çalışabilirsiniz.
MOM şu anda kullanabileceğiniz ve belgelerde ayrıntılı olarak açıklanan bunun gibi birçok özelliğe sahiptir. İlişkisel alanlar bir göz atmak için iyi bir neden olabilir.
Sonuç
MOM sağladığı esneklikle iş akışınızı iyileştirebilir ve birçok farklı şekilde faydalı olabilir.