Web2py — очень интересный фреймворк, единственный в своем роде. Минимальный порог вхождения, не нужно ни консоли, ни редактора, все можно делать в браузере. Создан для обучения, но, тем не менее, подходит для создания весьма серьезных приложений.

Создан в 2007-м, поддержка совместимости обеспечивается начиная с Python 2.5. Это часть философии — код не должен ломаться никогда.

Недавно обнаружил, что web2py наконец-то адаптировали к 3-й версии Питона, интерес к нему снова начал расти. Проверил на 3.6 — работает.

Были попытки вынести поддержку 3-й версии Питона в отдельный проект, web3py, но в итоге решили просто допилить существующую версию. Web3py так же имеется, но это будет уже совсем другая история.

Автор рассказывает о фреймворке и демонстрирует его возможности:

История

Web2py создал Массимо ДиПьеро, профессор университета DePaul, специалист по анализу данных, научным и высокопроизводительным вычислениям. Фреймворк создан для обучения веб-разработке, отсюда и вся магия, которая происходит под капотом: нужно как можно проще делать не самые простые вещи.

Тем не менее, эта магия создана с умыслом: дать основу, чтобы проще разбираться с деталями и углубляться в технологии веб-разработки (SQL, тестирование, авторизация и пр.).

Работа с базами данных

Web2py использует слой абстракции над SQL (Database Abstraction Layer). В 2015-м этот функционал вынесли в отдельный модуль — pyDAL.

В отличие от ORM (Object Relational Mapping), синтаксис DAL максимально приближен к SQL, что делает его более подходящим для обучения. К тому же DAL гораздо проще и понятнее. Это не объекты, как в ORM, а функции. Никакого ООП не нужно.

PyDAL — самостоятельный проект, его можно использовать с Flask, Bottle или другими фреймворками.

Простота

Web2py можно скачать как исполняемый файл и запустить без командной строки. Или склонировать с Гитхаба и делать все руками. Все изменения из админки отражаются на файловой системе и наоборот. Порог вхождения минимизирован везде, где только можно.

На хостинге PythonAnywhere за пару минут можно раскатать свой проект на web2py. Есть бесплатные тарифы и интересные возможности для онлайн-обучения.

Миграции

Любые изменения в БД через DAL применяются автоматически, без отдельных команд, без перезапуска сервера. В админке доступен лог SQL-запросов, там видно, что происходит.

Шаблоны

Вьюха — HTML-файл. Для вывода переменных используется Питон. Никакого шаблонизатора, используем то, с чем уже и так работаем.

Батарейки

Web2py без зависимостей позволяет создавать полноценный сайт с админкой, юзерами, логином через соцсети, оплатой картами, рассылкой писем и СМС, кешированием и пр. Модули можно доустанавливать, но батареек по умолчанию дофига.

Приложения

На одной установке web2py можно крутить много приложений (сайтов, API и пр.). Можно использовать одну или несколько БД, наладить взаимодействие между приложениями, шарить данные в базах, менять морды сайтов, использующих общую БД и т. д.

Переводы

Идут из коробки, добавлять можно через админку.

Режимы

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

Сервер

По умолчанию использует Rocket, но можно выбрать другой Питоновский сервер. Перезапускать сервер при разработке вообще не требуется. Местами нужно нажать кнопку в админке, чтобы обновить роуты.

Будущее

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

Тем не менее, автор работает над новой клевой штукой, которая пока не опубликована. Это будет что-то интересное:

It is based on bottle + gevent + gunicorn + rethinkdb + pydal + vue.js + some code ported from web2py (templates, helpers, validators, internationalization, scheduler)

Unlike web2py it uses modules not execfile and this makes it 10x faster (this part is done) and code it no longer interpreted at every request. Only on change.

Routes are declared using decorators like in bottle and flask.

It will use rethinkdb for storing errors, sessions, and anything user defined. This allows to scale horizontally. Nothing gets stored on the file system any more. Ever. Unless you choose to use sqlite for your app.

No more forms and grids generated server side. Possible and will probably backport SQLFrom and Gid but will discourage it. The default client will be in vue.js. The forms and grids will be generated client-side based on self-documenting APIs. This work must be done. It is not terribly hard just pedantic.

It has a redesigned admin. Not necessarily better but leaner. This part is also done although it may need restyling.

I am ditching a lot of the web2py auth logic. Nobody really uses groups and permissions and the way it is done may not be the best way for everybody. Instead I will default to auth0 integration.

From a developer prospective the code will look very similar and I will be able to recycle 90% of the documentation.

The problems are that web2py grew a bit bloated and typical programming patterns have shifted from postbacks to single page apps with form submission via API. Also web2py does not provide enough tools for scaling since uses filesystem by default. The new version will do less then current web2py but will remedy those issues and make it easier to make responsive and scalable apps.

Ссылки по теме