00: Flask Todo Uygulaması

00: Flask Todo Uygulaması

Örnek Flask Todo Ugulaması

Herkese merhaba,

Flask, python ile yazılmış, hızlı şekilde web uygulaması geliştirmenize yarayan bir web frameworktür. Mikro framework olması nedeniyle genellikle basit uygulamalar için kullanabileceği düşünülsede, flask’ın esnek yapısından faydalanarak istediğiniz büyüklükte web uygulamaları geliştirebilirsiniz.

Flask hakkında maalesef yeteri kadar Türkçe kaynak yok.Olan kaynaklarda genelde tek sayfalık uygulamalar şeklinde kalıyor o yüzden bende flask kullanarak nasıl daha geniş çapta uygulamalar geliştirebiliriz, bu uygulamalarda hangi modülleri ne amaçla kullanmak gerekir, uygulamanın dosya yapısı ne şekilde olmalı, bunları örnek bir todo uygulaması üzerinden elimden geldiğince anlatmak istedim.

İlk önce hemen uygulamanın kodlarını paylaşayım.

Örnek uygulamaya github üzerinden ulaşabilirsiniz. https://github.com/erhan/flask-todo

Ayrıca uygulamayı heroku üzerinden yayına aldım.Ona da bu adres üzerinden erişebilirsiniz.

https://flask-todo-ornek.herokuapp.com

İlk önce sitede hangi modülleri kullandık onunla başlayalım.Kullanılan modüllere requirements.txt dosyasından erişebilirsiniz.

flask : Web framefork.

flask-wtf : Uygulama üzerinde ki form’ları yönetebileceğiniz kullanışlı bir modül.

flask-bootstrap : Wtform ile form oluştururken bootstrap’ta kullanmak istiyorsanız kullanışlı bir modül. Fakat daha özel tasarımda formlar oluşturmak istediğiniz durumlarda gereksiz olabilir.

psycopg2 : Uygulama üzerinde veritabanı olarak postgresql kullanmak istiyorsanız. Postgresql driverını kullanabilirsiniz. Eğer veritabanı olarak tercihiniz mysql olucaksa kullanmanız gereken driver mysqlclient olmalı.

flask-migrate: Veritabanı üzerinde değişiklik yapmak istediğinizde migration oluşturmak için gerekli modül.

flask-sqlalchemy : SQLAlchemy flask tarafında oldukça sık kullanılan çok başarılı bir ORM. Eğer uygulamanız veritabanı içericekse mutlaka kullanmanızı tavsiye ediyorum.

gunicorn : Uygulamanızı sunucu üzerinde yayınlamaya yarayan bir modül. heroku üzerinde yayınlarken gunicorn kullanmayı tercih ettiğim için ekledim.

Geliştirdiğim todo uygulaması basit bir uygulama bu uygulama için gerekli olmasa bile yazı başlangıcında anlattığım nedenlerden dolayı uygulamayı genişletilebilir bir klasör yapısında oluşturdum. Özellikle biraz daha geniş ölçekli uygulamalar için benim tercih ettiğim klasör yapısı şu şekilde.

~/flask-***todo
    ***|-- run.py
    |-- config.py
    |-- migrate.py
    |__ /migrations    
    |__ /env
    |__ /app
         |-- __init__.py
         |-- /helpers
         |-- /models
             |-- __init__.py
             |-- model_1.py
             |-- model_2.py
             |-- model_3.py
             |-- ..
             |-- .
         |-- /modules
             |-- __init__.py
             |-- /module_1
                 |-- __init__.py
                 |-- controllers.py
                 |-- forms.py
             |-- /module_2
                 |-- __init__.py
                 |-- controllers.py
                 |-- forms.py
             |-- /module_3
                 |-- __init__.py
                 |-- controllers.py
                 |-- forms.py
             |-- ..
             |-- .
         |-- /templates
             |-- /module_1
                 |-- index.html
                 |-- ..
                 |-- .
             |-- /module_2
                 |-- index.html
                 |-- ..
                 |-- .
             |-- /module_3
                 |-- index.html
                 |-- ..
                 |-- .
             |-- 404.html
             |-- 500.html
             |-- _base.html
             |-- ..
             |-- .
         |__ /static
             |__ /css
             |__ /fonts
             |__ /images
             |__ /js

Genel olarak dosya ve klasörleri açıklamak gerekirse.

run.py : Uygulamanın çalıştığı dosya.

config.py : Uygulma ayarlarını içeren dosya.

migrate.py ve migrations klasörü : Veritabınında migrate oluşturabilmek için flask-migrate için gerekli dosya ve klasörler.

env : Virtualenv klasörü

app/init.py : Flask uygulaması ve onun yanında gerekli tüm compenentler bu dosyada oluşturuluyor.

helpers : Uygulama içinde kullanacağınız decarator’ler , jinja custom filtreler veya size yardımcı olabilecek ek fonksiyonları bu klasör altında dosyalar oluşturarak kullanabilirsiniz.

models : Uygulamada kullanılacak olan veritabanı modellerini içerir.

modules : Uygulamanın modüllerini içerir. Todo uygulaması için kullanıcı işlemlerini bir modül. Todo işlemlerini farklı bir modül şeklinde düşünebilirsiniz.

static : Web uygulamasının tüm statik dosyalarını içerir.Resimler, fontlar ,css ve javascript dosylarını bu klasör altında toplayabilirsiniz.

templates : Web uygulamasının html dosyalarını içerir.

Örnekte de olduğu gibi flask uygulamanızı modüllere ayırarak istediğiniz büyüklükte genişletebilirsiniz.

Uygulama ile ilgili ilk yazı olduğu için biraz uzun bir yazı oldu. Flask ve kullanılan modüller hakkında anlatılması gereken daha derinlere inilmesi gereken çok konu var. Bundan sonraki yazılarda anlatmayı düşündüğüm konular şu şekilde.

  • Blueprint

  • Jinja

  • Sqlalchemy

  • WTForm

  • DB migrations

  • Heroku Deploy

Kaynaklar