framework battle: django vs flask vs chalice

Post on 14-Apr-2017

182 Views

Category:

Software

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Framework Battle: Django, Flask, Chalice By Dmytro Podoprosvietov

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

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

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

Framework Battle

Django

TurboGears

Web2py

CubicWeb

Grok

Tornado

Flask

Bottle.py

webapp2

CherryPy

Pyramid

Falcon

Pylons

Chalice

Zappa

django-zappa

Full-Stack Frameworks

Django

TurboGears

Web2py

Tornado

Pylons

Full-Stack Frameworks

Django

TurboGears

Web2py

Tornado

Pylons

- Web-сервера

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

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

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

- AJAX-toolkit

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

Non Full-Stack Frameworks

Flask

Bottle

CherryPy

Pyramid

Non Full-Stack Frameworks

Flask

Bottle

CherryPy

Pyramid

- Контруктор

- Базовый web-server

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

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

Specific Frameworks

Tornado

Chalice

Zappa

aiohttp

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

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

- Instagram

- Disqus

- Mozilla

- Pinterest

- YouTube

- Google

- The Washington Post

- FreeNas

- python.org

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

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

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

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

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

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

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

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

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

from flask import Flaskapp = Flask(__name__)

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

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

Hello World

Что хорошо?

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

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

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

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

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

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

Проект “overholt”

- 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

- 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

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

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

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

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

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

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

Если сложно - - 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)

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

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

Chalice: A Serverless Microframework for Python

top related