Flask MVC (Unit-7) WTForms Kullanımı
MVC Controller Layer bir önceki yazı dizimizin konusuydu. MVC’nin kontrol katmanında, bütün sorguların, isteklerin ilk olarak bu katmana uğrayacağını ve taleplere göre görüntülemenin şekilleneceğinden bahsetmiştik.
Bugünkü seri yazımıza Flask – WTForms ile devam ediyoruz. Bu form doğrulamaya yardımcı olmak için harika bir araçtır. Örneğin, Siteler Arası İstek Sahteciliğinden kaçınma gibi (avoidance of Cross-Site Request Forgery-CSRF )
Flask – WTForms, basit Python modelleriyle web formlarının oluşturulmasına ve kullanılmasına yardımcı olarak sıkıcı ve sıkıcı form doğrulamasını çocuk oyuncağına dönüştürür.
Flaskda form işlemleri için bu projede WTForms kullanacağız. WTForms aracı, modelleyerek bir form oluşturmamızı sağlıyor.
from wtforms import Form, PasswordField, StringField, SubmitField
from wtforms.validators import Email, DataRequired
class AuthorEditForm(Form):
name = StringField('Adı', [DataRequired("Ad alanı boş geçilemez")])
surName = StringField('Soyadı', [DataRequired("Soyad alanı boş geçilemez")])
Yukarıdaki kodda auhtor edit edecek olduğumuz html sayfasındaki form modelini görüyorsunuz. Ayrıca wtforms ile gelen validators sayesinde de form elemanlarının validate edilmesini, validate olmaması durumunda da custom mesaj vermeyi sağlayabiliyoruz.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Book Store Application</title>
</head>
<body>
<a href="{{ url_for('main.index') }}"> Main Page</a>:::
<a href="{{ url_for('publisher.index') }}"> Publishers</a>:::
<a href="{{ url_for('author.index') }}"> Authors</a>:::
<a href="{{ url_for('book.index') }}"> Books</a><br>
</body>
</html>
Yukarıda base.html’e ait satırlar var. Burada yine {{ .. }} ifadesi bulunmakta bu bize jinja2’yle ilgili bir render işlemi olacağını gösteriyor. url_for ifadesi verilen kontrollerın navigate edileceği .html dosyasını otomatik olarak extract ederek bir menü oluşturuyoruz. İsminin base olması nedeniyle ana menümüz bu dosyamızda olacak. Diğer sayfalar ise bu dosyayı
{% extends 'layout/base.html' %}
ile kendilerini extend edecek. Bu sayede kendimiz bir layout sistemi yapmış oluyoruz.