Flask MVC (Unit-6) MVC Controller Layer
Önceki HTML Render başlıklı yazımızda Klasör yapımızda template isminde bir klasör vardı ve buna değinmiştik. Template klasörü render_template aracı tarafından tanınmaktaydı. View edeceğimiz .html dosyalarını burada bulabiliyordunuz.
Şimdide modüllerimize bakalım. Aslında buraya controller desek belki daha doğru olacak çünkü requestler ilk olarak bu katmana uğrayacak ve requeste göre view şekillenecek. Aşağıdaki kodu inceleyelim.
#authors.py from flask import Blueprint, render_template, redirect, url_for, request, g from app.modules.manage.Forms.authorForm import AuthorEditForm from app.models import Author from app import db mdl = Blueprint('author', __name__, url_prefix='/manage') @mdl.route('/author', methods=['GET']) def index(): a = Author.query.all() return render_template('/manage/authors.html',b = a) @mdl.route('/author/delete/<int:author_id>', methods=['GET']) def delete(author_id = 0): a = Author.query.filter(Author.Id == author_id).first() db.session.delete(a) db.session.commit() return redirect(url_for("author.index")) @mdl.route('/author/edit/<int:author_id>', methods=['GET','POST']) def edit(author_id = 0): frm = AuthorEditForm(request.form) a = Author.query.filter(Author.Id == author_id).first() if request.method == 'POST' and frm.validate(): a = Author.query.filter(Author.Id == author_id).first() a.Name = frm.name.data a.SurName = frm.surName.data db.session.add(a) db.session.commit() return redirect(url_for("author.index")) frm.name.data = a.Name frm.surName.data = a.SurName return render_template('/manage/authorEdit.html', form=frm)
Modülü blueprint ile app’ye register ettikten sonra route ve http methodunu belirterek control fonksiyonlarımızı yazıyoruz. Fonksiyonlarda view’e göndereceğimiz nesneyi oluşturup ilgili html dosyasına göndererek render ediyoruz. Bu sayede ilgili html dosyasında gönderilen nesne ve/ya nesneler kullanabilir hale geliyor. Crud işlemlerini SQLAlchemy ile yapıyoruz. AuthorEditForm(request.Form) wtforms aracının bize tanıdığı bir olanak. Bu sayede request olarak gelen form serialize edilir ve bu sayede form elemanlarına erişim sağlayarak istediğimiz gibi kullanabiliriz. Misalen yukarda edit işlemi için ilgili id’ye ait authoru SQLAlchemy ile database’den bulup authorEdit.html’de bulunan {{ render_field(form.Name) }} olarak gösterebiliyoruz.
Geri bildirim: Flask MVC (Unit-7) WTForms Kullanımı - Bilişim Profesyonelleri