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
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