framework battle: django vs flask vs chalice
Post on 14-Apr-2017
182 Views
Preview:
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)
- Disqus
- Mozilla
- YouTube
- 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