@app.route('/deep-thought')
def answer_the_question():
return 'The answer is 42.'
Если вы используете Flask, ответственность за выбор других компонентов приложения (если таковые нужны) ложится на вас. Например, доступ к базам данных или генерация/проверка форм не встроены во Flask (поскольку многим веб-разработчикам эта функциональность не нужна). Если вам это требуется, существует множество доступных расширений ( http://flask.pocoo.org/extensions/) вроде SQLAlchemy ( http://flask-sqlalchemy.pocoo.org/) для баз данных, pyMongo ( https://docs.mongodb.org/getting-started/python/) для MongoDB и WTForms ( https://flask-wtf.readthedocs.org/) для работы с формами.
Flask является выбором по умолчанию для любого веб-приложения, которое не подходит для заранее созданных временных платформ от Django. Попробуйте запустить эти примеры приложений для Flask ( https://github.com/pallets/flask/tree/master/examples), чтобы ознакомиться с фреймворком. Если хотите запустить несколько приложений (по умолчанию для Django), применяйте инструмент для планирования ( http://bit.ly/application-dispatching). Если желаете дублировать наборы подстраниц внутри приложения, используйте Flask’s Blueprints («Эскизы Flask») ( http://flask.pocoo.org/docs/0.10/blueprints/).
Tornado ( http://www.tornadoweb.org/) — это асинхронный (управляемый событиями и неблокирующий, как Node.js ( https://nodejs.org/en/)) веб-фреймворк для Python, который имеет собственный цикл событий [87] Он был вдохновлен веб-сервером проекта Twisted ( http://twistedmatrix.com/trac/wiki/TwistedWeb ), который является частью тулкита Tornado для работы с сетями. Если вы хотите воспользоваться функциональностью, которой нет в Tornado, попробуйте поискать ее в Twisted. Но предупреждаем: новичкам трудно освоить Twisted.
. Это позволяет нативно поддерживать, например, протокол коммуникации WebSockets ( http://bit.ly/websockets-api). В отличие от других фреймворков, показанных в этом разделе, Tornado не является приложением WSGI ( http://www.tornadoweb.org/en/stable/wsgi.html). Его можно запустить как приложение или сервер WSGI с помощью модуля tornado.wsgi, но даже его авторы спросят: «А в чем смысл?» [88] На самом деле в документации относительно WSGI сказано следующее: «Используйте WSGIContainer только в том случае, когда преимущества объединения Tornado и WSGI в одном процессе перекрывают сниженную масштабируемость».
, поскольку WSGI — это синхронный интерфейс, а Tornado — асинхронный фреймворк.
Tornado сложнее, чем Django или Flask, и используется гораздо реже. Работайте с ним только в том случае, если прирост производительности, связанный с применением асинхронного фреймворка, будет стоить дополнительного времени, затраченного на программирование. Если решитесь, хорошей стартовой точкой станут демонстрационные приложения ( https://github.com/tornadoweb/tornado/tree/master/demos). Качественно написанные приложения Tornado славятся отличной производительностью.
Pyramid ( http://www.pylonsproject.org/) похож на Django, однако больший упор в нем делается на модульность. Поставляется вместе с несколькими встроенными библиотеками (меньшее количество функциональности доступно сразу) и поощряет расширение его базовой функциональности с помощью шаблонов, которые называются временными платформами.
Вы регистрируете временную платформу, а затем вызываете ее при создании нового проекта с помощью команды pcreate — аналогично команде Django django-admin startproject project-name command, но у вас имеются параметры для работы с разными структурами, бэкендами для баз данных и маршрутизацией URL.
Pyramid не очень востребован у пользователей, в отличие от Django и Flask. Это хороший фреймворк, но он не считается популярным выбором для создания новых веб-приложений на Python.
По адресу http://docs.pylonsproject.org/projects/pyramid-tutorialsможно найти несколько руководств для Pyramid. Чтобы убедить вашего босса использовать Pyramid, взгляните на портал https://trypyramid.com/, где имеется большой объем информации о Pyramid.
Большая часть приложений WSGI предназначена для реагирования на запросы HTTP и обслуживания содержимого в формате HTML или других языках разметки. Движки шаблонов отвечают за отрисовку этого содержимого: управляют набором файлов шаблонов, имеют систему иерархии и включения, позволяющую избежать лишнего повторения, и заполняют статическое содержимое шаблонов динамическим содержимым, сгенерированным приложением. Это помогает придерживаться концепции разделения обязанностей [89] Разделение обязанностей ( https://en.wikipedia.org/wiki/Separation_of_concerns ) — это принцип проектирования, который означает, что хороший код является модульным: каждый компонент должен делать что-то одно.
— мы размещаем логику в коде, а отрисовку доверяем шаблонам.
Читать дальше