framework battle: django vs flask vs chalice

34
Framework Battle: Django, Flask, Chalice By Dmytro Podoprosvietov

Upload: step-computer-academy-zaporozhye

Post on 14-Apr-2017

181 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Framework Battle: Django vs Flask vs Chalice

Framework Battle: Django, Flask, Chalice By Dmytro Podoprosvietov

Page 2: Framework Battle: Django vs Flask vs Chalice

Всем Привет!!!

Меня зовут Дмитрий! И я...

Platform Architect в… ну вроде как ...

Page 3: Framework Battle: Django vs Flask vs Chalice

Framework Battle

Page 4: Framework Battle: Django vs Flask vs Chalice

Django

TurboGears

Web2py

CubicWeb

Grok

Tornado

Flask

Bottle.py

webapp2

CherryPy

Pyramid

Falcon

Pylons

Chalice

Zappa

django-zappa

Page 5: Framework Battle: Django vs Flask vs Chalice

Full-Stack Frameworks

Django

TurboGears

Web2py

Tornado

Pylons

Page 6: Framework Battle: Django vs Flask vs Chalice

Full-Stack Frameworks

Django

TurboGears

Web2py

Tornado

Pylons

- Web-сервера

- Хранилища данных

- Модуль аутентификации

- Диспетчеризация запросов

- AJAX-toolkit

- И много чего еще.

Page 7: Framework Battle: Django vs Flask vs Chalice

Non Full-Stack Frameworks

Flask

Bottle

CherryPy

Pyramid

Page 8: Framework Battle: Django vs Flask vs Chalice

Non Full-Stack Frameworks

Flask

Bottle

CherryPy

Pyramid

- Контруктор

- Базовый web-server

- Базовая диспетчеризация запросов

- Замена компонентов

Page 9: Framework Battle: Django vs Flask vs Chalice

Specific Frameworks

Tornado

Chalice

Zappa

aiohttp

Page 10: Framework Battle: Django vs Flask vs Chalice
Page 11: Framework Battle: Django vs Flask vs Chalice

Django — свободный фреймворк для веб-приложений на языке Python, использующий шаблон проектирования MVC. Проект поддерживается организацией Django Software Foundation.

Сайт на Django строится из одного или нескольких приложений, которые рекомендуется делать отчуждаемыми и подключаемыми. Это одно из существенных архитектурных отличий этого фреймворка от некоторых других (например, Ruby on Rails). Один из основных принципов фреймворка — DRY (Don't repeat yourself)

Page 12: Framework Battle: Django vs Flask vs Chalice

- Instagram

- Disqus

- Mozilla

- Pinterest

- YouTube

- Google

- The Washington Post

- FreeNas

- python.org

Page 13: Framework Battle: Django vs Flask vs Chalice
Page 14: Framework Battle: Django vs Flask vs Chalice

Django REST Framework

django CMS

Sentry

Python Social Auth

Django-extensions

Django-debug-toolbar

Raven

Django-bootstrap3

Django REST swagger

Django-celery

Piston

Django-wiki

Django-mptt

Django-tastypie

django-tastypie

Django-socketio

Django-push-notifications

Django-jenkins

Django-import-export

Django-nose

Jsonfield

Django-cachalot

Django-rq

Django-storages

Django-filter

django-ipware

Page 15: Framework Battle: Django vs Flask vs Chalice

Django REST Framework

django CMS

Sentry

Python Social Auth

Django-extensions

Django-debug-toolbar

Raven

Django-bootstrap3

Django REST swagger

Django-celery

Piston

Django-wiki

Django-mptt

Django-tastypie

django-tastypie

Django-socketio

Django-push-notifications

Django-jenkins

Django-import-export

Django-nose

Jsonfield

Django-cachalot

Django-rq

Django-storages

Django-filter

django-ipware

Page 16: Framework Battle: Django vs Flask vs Chalice

- ORM, API доступа к БД с поддержкой транзакций- встроенный интерфейс администратора, с уже имеющимися переводами на многие

языки- диспетчер URL на основе регулярных выражений- расширяемая система шаблонов с тегами и наследованием- система кеширования- Интернационализация- подключаемая архитектура приложений, которые можно устанавливать на любые

Django-приложения- «generic views» — шаблоны функций контроллеров- авторизация и аутентификация, подключение внешних модулей аутентификации:

LDAP, OpenID и проч.- система фильтров («middleware») для построения дополнительных обработчиков

запросов, как например включённые в дистрибутив фильтры для кеширования, сжатия, нормализации URL и поддержки анонимных сессий

- библиотека для работы с формами

Page 17: Framework Battle: Django vs Flask vs Chalice

Flask — фреймворк для создания веб-приложений на языке программирования Python, использующий набор инструментов Werkzeug, а также шаблонизатор Jinja2. Относится к категории так называемых микрофреймворков — минималистичных каркасов веб-приложений, сознательно предоставляющих лишь самые базовые возможности.

Page 18: Framework Battle: Django vs Flask vs Chalice

from flask import Flaskapp = Flask(__name__)

@app.route("/")def hello(): return "Hello World!"

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

Hello World

Page 19: Framework Battle: Django vs Flask vs Chalice

Что хорошо?

- “микрофреймворк” — это идея сохранить ядро простым, но расширяемым.

- Гибкость и свобода а выборе:1. компонентов2. структуры проекта3. хранилища данных 4. технологии аутентификации

- Огромное количество flask-батареек - Но их их можно игнорировать и использовать просто библиотеки

- Отлично подходит для микросервисной архитектуры приложений

Page 20: Framework Battle: Django vs Flask vs Chalice

К примеру - структура проекта

Page 21: Framework Battle: Django vs Flask vs Chalice

К примеру - структура проекта

Page 22: Framework Battle: Django vs Flask vs Chalice

Проект “overholt”

Page 23: Framework Battle: Django vs Flask vs Chalice

- Flask-boilerplate

- Celery

- SQLAlchemy

- Pymongo

- MongoKit

- PeeweeORM

- Flask-restful

- Flask-CORS

- Flask-WTF

- Flask-Login

- Flask-oauth

- Flask-script

- Flask-bcrypt

- Flask-cache

- Flask-beaker

- Gevent-socketio

- Gevent-websocket

- Flask-Foundation

- Flask-testing

- Flask-admin

- Flask

- Alembic

- Flask-DebugToolbar

- Flask-Gravatar

Page 24: Framework Battle: Django vs Flask vs Chalice

- Flask-boilerplate

- Celery

- SQLAlchemy

- Pymongo

- MongoEngine

- MongoKit

- Peewee ORM

- Flask-restful

- Flask-CORS

- Flask-WTF

- Flask-Login

- Flask-oauth

- Flask-script

- Flask-bcrypt

- Flask-cache

- Flask-beaker

- Gevent-socketio

- Gevent-websocket

- Flask-Foundation

- Flask-testing

- Flask-admin

- Flask

- Alembic

- Flask-DebugToolbar

- Flask-Gravatar

Page 25: Framework Battle: Django vs Flask vs Chalice

Если просто - - Imports- Context variables

Page 26: Framework Battle: Django vs Flask vs Chalice

Если сложно - - Imports- Context variables

Page 27: Framework Battle: Django vs Flask vs Chalice

Если сложно - - Imports

- Flask плохо растет. - Blueprints не спасают.. А часто позволяют

стрелять в ногу.- Циркулярные импорты - это к тому, чему тоже

стоит привыкнуть- from myapp import app OR from flask import current_app ???

Page 28: Framework Battle: Django vs Flask vs Chalice

Если сложно - - Imports- Context variables

- flask.request --- это thread local variable, а значит это глобальная переменная в рамках запроса. Мало того, который исполняется в момент импорта.

@app.route('/login', methods=['GET', 'POST'])def login(): if request.method == 'POST': do_the_login() else: show_the_login_form()

- Точка G Flask’а (flask.g) - тоже самое.

- from flask import current_app и это работает только в контексте запроса.

- Контекст приложения - это тоже в рамках вещей. with app.app_context():

table = TableManager(self.table_id)

Page 29: Framework Battle: Django vs Flask vs Chalice

В Flask есть лишь одно ограничение, которое нужно учитывать при разработке — это context local objects. Вот именно оно вносит некоторую сложность при наличии большой кодобазы, т.к. несколько объектов, определенных в github.com/mitsuhiko/flask/blob/master/flask/globals.py, являются глобальными, и для их использования их нужно явно импортировать, в результате можно легко выстрелить себе в ногу.

Page 30: Framework Battle: Django vs Flask vs Chalice

Flask все равно крутой!

Page 31: Framework Battle: Django vs Flask vs Chalice

Chalice: A Serverless Microframework for Python

Page 32: Framework Battle: Django vs Flask vs Chalice
Page 33: Framework Battle: Django vs Flask vs Chalice
Page 34: Framework Battle: Django vs Flask vs Chalice