SlideShare a Scribd company logo
1 of 26
Django vs. Flask




              Porovnanie frameworkov z
            hľadiska modulárnych aplikácií
Tomáš Drenčák

l
    6 rokov Java
l
    2 roky python
l
    väčšinou weby a databázy
Flasky goodness

l
    Kenneth Reitz
    l https://speakerdeck.com/kennethreitz/flasky-goodness
    l Flasky goodness (or why django sucks?)
Výhody django

l
    Modulárnosť
l
    Bezpečnosť
l
    Výborná dokumentácia
l
    Hotové django apps tretích strán
l
    Komunita
Batteries included

l
    Admin interface
l
    Console (manage.py)
l
    Databáza + ORM + migrácie
l
    User management + autentifikácia
l
    Session
l
    Lokalizácia
l
    ...
Django apps

l
    Django apps
l
    Model + web                        Firmy




                    Kampane                    Zákazníci




                                                                 Nákupy


           Emaily
                              Filtre


                                                           Produkty
Django apps - Spaghetti

l
    Django apps
l
    Model + web                        Firmy




                    Kampane                    Zákazníci




                                                                 Nákupy


           Emaily
                              Filtre


                                                           Produkty
Štruktúra Django aplikácie


                                       Asynchrónne spracovanie:
  Nástroje:         Web:

                                       Plánované úlohy
  Manažment         User interface
                                       Asynchrónne úlohy
  Podporné služby   API Service

                    Data persistence

                    CRUD Admin

                    Autentifikácia
Štruktúra Django aplikácie


                                       Asynchrónne spracovanie:
  Nástroje:         Web:

                                       Plánované úlohy
  Manažment         User interface
                                       Asynchrónne úlohy
  Podporné služby   API Service

                    Data persistence

                    CRUD Admin

                    Autentifikácia
Riešenie




                 ORTOGONALITA
                      Alebo
           rob jednu vec a rob ju dobre
Webová aplikácia

l
    Prezentačná vrstva   l
                             Web service
l
    Dátová vrstva        l
                             Async
l
    Servisná             l
                             Pluginy
                         l
                             Command line
Django




                           Model
          Web




         Web service     Service




         Command Line
                        Async worker
Django API




                             Model

              Web




                             Service

             Web service




             Command Line
                            Async worker
Nevýhody

l
    Stráca sa DRY
l
    Nepoužiteľné batteries included
l
    Nepoužiteľné django apps tretích strán
Flask

l
    Web microframework
l
    Používa Werkzeug WSGI a Jinja2 ako template
l
    Žiadne závislosti
l
    Bring your own batteries
Hello world


 from flask import Flask
 app = Flask(__name__)

 @app.route('/')
 def hello_world():
   return 'Hello World!'

 if __name__ == '__main__':
     app.run()

 $ python hello.py
  * Running on http://127.0.0.1:5000/
Rozšírenia

l
    Flask-SQLAlchemy - ORM
l
    Flask-Celery
l
    Flask-Script - manage.py
l
    Flask-WTF - validácia formulárov
Výhody


    Hierarchické formuláre

    Všetky možnosti SQL

    Jednoduchšia práca s template

    Možnosť určiť si architektúru

    Pri testovaní sa používajú reálne objekty

    Flask fillin – testovanie formulárov v template

    Routovanie nie je sekvenčné

    Malá knižnica, nemá veľa „Mágie“
Flask API



      Web               API moduly

                           Model
      Zákazníci
                          Reporting

       Kampane    API
                                   Email


        Nákupy


                              Celery
Flask API

l
    create(company, "customer", email="test@example.com", **kwargs)
l
    read(company, "customer", 1)
l
    update(company, "customer", 1, email="another@example.com", **kwargs)
l
    delete(company, "customer", 1)
l
    object_list(company, "customer", type="new", **kwargs)
l
    object_count(company, "customer", type="new", **kwargs)

l
    Pokrýva 80 % funkcionality
l
    Ostatné cez samostatné funkcie, napr. reporting
Flask view
@route('/', methods=['GET', 'POST'])
def create_customer(id):
  form = CustomerForm()
  if form.validate_on_submit():
    object = marketing.create(
       current_user.company, 'customer', **form.data
    )
    return redirect(url_for('customer.update', id=object.id))
  return render_template('customer_form.html', form=form)
Výhody/Nevýhody

l
    Závislosť je len cez volanie funkcie a vrátený objekt – duck typing
l
    CRUD operácie netreba vytvárať
l
    Oddelené moduly

l
    Je potrebné si vytvárať integrácie s WTForms pre lookup atď
SQLAlchemy

Relačná vrstva
ORM vrstva sa mapuje na relačnú
Plné pokrytie SQL a využitie funkcií databázy, napr. agregácie
Objektové skladanie query
Joined select loading
Agregácia príklad

session.query(
      Customer,
      Purchase.type,
      sum(Purchase.price)
).filter(Purchase.date.between(date(2012,1,1), date(2012,12,31)))
.join(Purchase)
.group_by(Customer,Purchase.type)


select
    customer.*,
    purchase.type,
    sum(purchase.price)
from customer
    join purchase on customer.id = purchase.customer_id
Where purchase.date between '2012-01-01' and '2012-12-31'
group_by customer.id, purchase.type
SQLAlchemy vs Django
          ORM
Django ORM                   SQLAlchemy
Objektový model              Relačná a ORM vrstva
Integrácia s django
                             1:1 ku SQL
Veľmi jednoduché agregácie
Jednoduché query sa robia    Optimalizácie DB
ľahko                        Pri query cez viac
Nedá sa optimalizovať        tabuliek treba joinovať
Ľahké joiny                  (bez špecifikácie
                             podmienky)
Zhrnutie

l
    Django
    l Menšie projekty
    l Jednoduchý model
    l Viem používať django bez úprav
l
    Flask
    l Väčšie projekty
    l Nutné väčšie investície zo začiatku
    l Reporting
    l Dá sa použiť ako django

More Related Content

Viewers also liked

Intage研究:2011年q2淘宝网宝贝关联销售数据报告 奶粉
Intage研究:2011年q2淘宝网宝贝关联销售数据报告 奶粉Intage研究:2011年q2淘宝网宝贝关联销售数据报告 奶粉
Intage研究:2011年q2淘宝网宝贝关联销售数据报告 奶粉wutitoudi
 
Karim raymond Inter Nations
Karim raymond Inter NationsKarim raymond Inter Nations
Karim raymond Inter NationsKarim Raymond
 
2010 on some fundamental features of optically stimulated luminescence measur...
2010 on some fundamental features of optically stimulated luminescence measur...2010 on some fundamental features of optically stimulated luminescence measur...
2010 on some fundamental features of optically stimulated luminescence measur...Gerardo Rivera Barrera
 
[费曼 你干吗在乎别人怎么想].(美)R·p·费曼.扫描版
[费曼 你干吗在乎别人怎么想].(美)R·p·费曼.扫描版[费曼 你干吗在乎别人怎么想].(美)R·p·费曼.扫描版
[费曼 你干吗在乎别人怎么想].(美)R·p·费曼.扫描版wutitoudi
 
C alendario nuevo
C alendario nuevoC alendario nuevo
C alendario nuevozrt_marcel
 
[Nlp简快心理疗法].李中莹.扫描版
[Nlp简快心理疗法].李中莹.扫描版[Nlp简快心理疗法].李中莹.扫描版
[Nlp简快心理疗法].李中莹.扫描版wutitoudi
 
Social media in the classroom
Social media in the classroom Social media in the classroom
Social media in the classroom gboo
 
2001 high sensitivity thermoluminescence dosimetry a.j.j. bos
2001 high sensitivity thermoluminescence dosimetry a.j.j. bos2001 high sensitivity thermoluminescence dosimetry a.j.j. bos
2001 high sensitivity thermoluminescence dosimetry a.j.j. bosGerardo Rivera Barrera
 

Viewers also liked (10)

Intage研究:2011年q2淘宝网宝贝关联销售数据报告 奶粉
Intage研究:2011年q2淘宝网宝贝关联销售数据报告 奶粉Intage研究:2011年q2淘宝网宝贝关联销售数据报告 奶粉
Intage研究:2011年q2淘宝网宝贝关联销售数据报告 奶粉
 
Karim raymond Inter Nations
Karim raymond Inter NationsKarim raymond Inter Nations
Karim raymond Inter Nations
 
Installation plan
Installation planInstallation plan
Installation plan
 
2010 on some fundamental features of optically stimulated luminescence measur...
2010 on some fundamental features of optically stimulated luminescence measur...2010 on some fundamental features of optically stimulated luminescence measur...
2010 on some fundamental features of optically stimulated luminescence measur...
 
[费曼 你干吗在乎别人怎么想].(美)R·p·费曼.扫描版
[费曼 你干吗在乎别人怎么想].(美)R·p·费曼.扫描版[费曼 你干吗在乎别人怎么想].(美)R·p·费曼.扫描版
[费曼 你干吗在乎别人怎么想].(美)R·p·费曼.扫描版
 
C alendario nuevo
C alendario nuevoC alendario nuevo
C alendario nuevo
 
[Nlp简快心理疗法].李中莹.扫描版
[Nlp简快心理疗法].李中莹.扫描版[Nlp简快心理疗法].李中莹.扫描版
[Nlp简快心理疗法].李中莹.扫描版
 
Calendario2
Calendario2Calendario2
Calendario2
 
Social media in the classroom
Social media in the classroom Social media in the classroom
Social media in the classroom
 
2001 high sensitivity thermoluminescence dosimetry a.j.j. bos
2001 high sensitivity thermoluminescence dosimetry a.j.j. bos2001 high sensitivity thermoluminescence dosimetry a.j.j. bos
2001 high sensitivity thermoluminescence dosimetry a.j.j. bos
 

Similar to Flask vs django

BarCamp - Zváračský kurz na Web
BarCamp - Zváračský kurz na WebBarCamp - Zváračský kurz na Web
BarCamp - Zváračský kurz na WebJuraj Michálek
 
Zváračský kurz na BlazeDS a Google App Engine
Zváračský kurz na BlazeDS a Google App EngineZváračský kurz na BlazeDS a Google App Engine
Zváračský kurz na BlazeDS a Google App EngineJuraj Michálek
 
Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?Jano Suchal
 
Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?Jano Suchal
 
Posun od Microsoft Exchange ku Google Apps
Posun od Microsoft Exchange ku Google AppsPosun od Microsoft Exchange ku Google Apps
Posun od Microsoft Exchange ku Google AppsInnova Apps
 
E marketing - google analytics - ivan kulich 16132
E marketing - google analytics - ivan kulich 16132E marketing - google analytics - ivan kulich 16132
E marketing - google analytics - ivan kulich 16132Eee-marketing
 
E marketing - google analytics - ivan kulich 16132
E marketing - google analytics - ivan kulich 16132E marketing - google analytics - ivan kulich 16132
E marketing - google analytics - ivan kulich 16132Eee-marketing
 
Require.JS & Backbone.JS
Require.JS & Backbone.JSRequire.JS & Backbone.JS
Require.JS & Backbone.JSsrigi
 
Design mobilnych aplikacii
Design mobilnych aplikaciiDesign mobilnych aplikacii
Design mobilnych aplikaciiSCR®
 
Bezpečnosť webových aplikácií (Martin Zajíček)
Bezpečnosť webových aplikácií (Martin Zajíček)Bezpečnosť webových aplikácií (Martin Zajíček)
Bezpečnosť webových aplikácií (Martin Zajíček)DCIT, a.s.
 

Similar to Flask vs django (11)

BarCamp - Zváračský kurz na Web
BarCamp - Zváračský kurz na WebBarCamp - Zváračský kurz na Web
BarCamp - Zváračský kurz na Web
 
Zváračský kurz na BlazeDS a Google App Engine
Zváračský kurz na BlazeDS a Google App EngineZváračský kurz na BlazeDS a Google App Engine
Zváračský kurz na BlazeDS a Google App Engine
 
Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?
 
Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?
 
Tastypie
TastypieTastypie
Tastypie
 
Posun od Microsoft Exchange ku Google Apps
Posun od Microsoft Exchange ku Google AppsPosun od Microsoft Exchange ku Google Apps
Posun od Microsoft Exchange ku Google Apps
 
E marketing - google analytics - ivan kulich 16132
E marketing - google analytics - ivan kulich 16132E marketing - google analytics - ivan kulich 16132
E marketing - google analytics - ivan kulich 16132
 
E marketing - google analytics - ivan kulich 16132
E marketing - google analytics - ivan kulich 16132E marketing - google analytics - ivan kulich 16132
E marketing - google analytics - ivan kulich 16132
 
Require.JS & Backbone.JS
Require.JS & Backbone.JSRequire.JS & Backbone.JS
Require.JS & Backbone.JS
 
Design mobilnych aplikacii
Design mobilnych aplikaciiDesign mobilnych aplikacii
Design mobilnych aplikacii
 
Bezpečnosť webových aplikácií (Martin Zajíček)
Bezpečnosť webových aplikácií (Martin Zajíček)Bezpečnosť webových aplikácií (Martin Zajíček)
Bezpečnosť webových aplikácií (Martin Zajíček)
 

Flask vs django

  • 1. Django vs. Flask Porovnanie frameworkov z hľadiska modulárnych aplikácií
  • 2. Tomáš Drenčák l 6 rokov Java l 2 roky python l väčšinou weby a databázy
  • 3. Flasky goodness l Kenneth Reitz l https://speakerdeck.com/kennethreitz/flasky-goodness l Flasky goodness (or why django sucks?)
  • 4. Výhody django l Modulárnosť l Bezpečnosť l Výborná dokumentácia l Hotové django apps tretích strán l Komunita
  • 5. Batteries included l Admin interface l Console (manage.py) l Databáza + ORM + migrácie l User management + autentifikácia l Session l Lokalizácia l ...
  • 6. Django apps l Django apps l Model + web Firmy Kampane Zákazníci Nákupy Emaily Filtre Produkty
  • 7. Django apps - Spaghetti l Django apps l Model + web Firmy Kampane Zákazníci Nákupy Emaily Filtre Produkty
  • 8. Štruktúra Django aplikácie Asynchrónne spracovanie: Nástroje: Web: Plánované úlohy Manažment User interface Asynchrónne úlohy Podporné služby API Service Data persistence CRUD Admin Autentifikácia
  • 9. Štruktúra Django aplikácie Asynchrónne spracovanie: Nástroje: Web: Plánované úlohy Manažment User interface Asynchrónne úlohy Podporné služby API Service Data persistence CRUD Admin Autentifikácia
  • 10. Riešenie ORTOGONALITA Alebo rob jednu vec a rob ju dobre
  • 11. Webová aplikácia l Prezentačná vrstva l Web service l Dátová vrstva l Async l Servisná l Pluginy l Command line
  • 12. Django Model Web Web service Service Command Line Async worker
  • 13. Django API Model Web Service Web service Command Line Async worker
  • 14. Nevýhody l Stráca sa DRY l Nepoužiteľné batteries included l Nepoužiteľné django apps tretích strán
  • 15. Flask l Web microframework l Používa Werkzeug WSGI a Jinja2 ako template l Žiadne závislosti l Bring your own batteries
  • 16. Hello world from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run() $ python hello.py * Running on http://127.0.0.1:5000/
  • 17. Rozšírenia l Flask-SQLAlchemy - ORM l Flask-Celery l Flask-Script - manage.py l Flask-WTF - validácia formulárov
  • 18. Výhody  Hierarchické formuláre  Všetky možnosti SQL  Jednoduchšia práca s template  Možnosť určiť si architektúru  Pri testovaní sa používajú reálne objekty  Flask fillin – testovanie formulárov v template  Routovanie nie je sekvenčné  Malá knižnica, nemá veľa „Mágie“
  • 19. Flask API Web API moduly Model Zákazníci Reporting Kampane API Email Nákupy Celery
  • 20. Flask API l create(company, "customer", email="test@example.com", **kwargs) l read(company, "customer", 1) l update(company, "customer", 1, email="another@example.com", **kwargs) l delete(company, "customer", 1) l object_list(company, "customer", type="new", **kwargs) l object_count(company, "customer", type="new", **kwargs) l Pokrýva 80 % funkcionality l Ostatné cez samostatné funkcie, napr. reporting
  • 21. Flask view @route('/', methods=['GET', 'POST']) def create_customer(id): form = CustomerForm() if form.validate_on_submit(): object = marketing.create( current_user.company, 'customer', **form.data ) return redirect(url_for('customer.update', id=object.id)) return render_template('customer_form.html', form=form)
  • 22. Výhody/Nevýhody l Závislosť je len cez volanie funkcie a vrátený objekt – duck typing l CRUD operácie netreba vytvárať l Oddelené moduly l Je potrebné si vytvárať integrácie s WTForms pre lookup atď
  • 23. SQLAlchemy Relačná vrstva ORM vrstva sa mapuje na relačnú Plné pokrytie SQL a využitie funkcií databázy, napr. agregácie Objektové skladanie query Joined select loading
  • 24. Agregácia príklad session.query( Customer, Purchase.type, sum(Purchase.price) ).filter(Purchase.date.between(date(2012,1,1), date(2012,12,31))) .join(Purchase) .group_by(Customer,Purchase.type) select customer.*, purchase.type, sum(purchase.price) from customer join purchase on customer.id = purchase.customer_id Where purchase.date between '2012-01-01' and '2012-12-31' group_by customer.id, purchase.type
  • 25. SQLAlchemy vs Django ORM Django ORM SQLAlchemy Objektový model Relačná a ORM vrstva Integrácia s django 1:1 ku SQL Veľmi jednoduché agregácie Jednoduché query sa robia Optimalizácie DB ľahko Pri query cez viac Nedá sa optimalizovať tabuliek treba joinovať Ľahké joiny (bez špecifikácie podmienky)
  • 26. Zhrnutie l Django l Menšie projekty l Jednoduchý model l Viem používať django bez úprav l Flask l Väčšie projekty l Nutné väčšie investície zo začiatku l Reporting l Dá sa použiť ako django