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.