Flask-MVC (Unit-2) MVC Model

Projeyi code first yaklaşımıyla geliştireceğimiz için öncelikle modellerimizi oluşturmalıyız. Örneğimiz bir kitap takip takip projesi olacak demiştik, şimdi buna göre modellerimizi oluşturmaya başlayalım. Örnek proje kısaltılmış bir proje olacak fakat eksik kısımlarını yazılardaki yönergeleri izleyerek siz rahatlıkla tamamlayabileceksiniz.

#baseModel.py
from app import db


class Base(db.Model):
    __abstract__ = True

    Id = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String(30))
    date_created = db.Column(db.DateTime, default=db.func.current_timestamp())
    date_modified = db.Column(db.DateTime, default=db.func.current_timestamp(), onupdate=db.func.current_timestamp())

#book.py
from app import db
from app.models.baseModel import Base


class Book(Base):
    __table_name__ = 'book'
    AuthorId = db.Column(db.Integer,db.ForeignKey('author.Id'))



    def __init__(self, name, authorid):
        self.Name = name
        self.AuthorId = authorid


    def __repr__(self):
        return self.Id
#author.py
from app import db
from app.models.baseModel import Base


class Author(Base):
    __table_name__ = 'author'
    SurName = db.Column(db.String(30))

    books = db.relationship('Book', backref='Author', lazy='dynamic')

    def __init__(self, name, surname):
        self.Name = name
        self.SurName = surname

    def __repr__(self):
        return self.Id

baseModel.py : Bu model diğer modellerin temelini oluşturacak örnek projede her model classında mutlaka id name date_created ve date_modifeid alanları olacağı için bu alanlar baseModel’e eklendi. İsterseniz bu modeli daha da genişletebilir daraltabilir veya kullanmayabilirsiz

book.py ve author.py Base’den türetiyoruz. Bu modeller aynı zamanda migration için kullanılacak. Migration için sqlAlchemy’den faydalancaz. Buradaki db ifadesi app klasörü içerisindeki __init__.py’de bulunan db=SQLAlchemy satırından geliyor. __table_name__ = ‘book’ ifadesi ile database tarafında ilgili modeli taşıyacak olan tablo adını belirliyoruz. db.Column() ifadesi ile modeldeki field’ın database tarafındaki column özelliklerini belirliyoruz. db.ForeignKey ise tablolar arasında ilişki kurmak için kullandığımı ifade oluyor. Author tablosundan herhangibir kayıt book tablosunda kullanılması durumunda exception oluşacak ve kayıt silinmeyecektir. Modellerin construction ve database’e kayıt oluştuktan sonra tetiklenecek olan methodları yazıyoruz. Burada__repr__ ile kayıt oluştuktan sonra bize yeni oluşan id numarası döncek.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

This site uses Akismet to reduce spam. Learn how your comment data is processed.