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.

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.