web2py — фреймворк с открытым исходным кодом для разработки веб приложений, написанный на языке программирования Python. Web2py позволяет веб разработчикам создавать динамические сайты используя Python. Web2py призван сократить рутинные процессы веб разработки, такие как написание веб форм с нуля, хотя разработчик может разработать форму с нуля, если в этом возникнет необходимость.Web2py (2013), What is web2py?, web2py.com, retrieved 11 October 2013, <http://www.web2py.com/init/default/what >
Web2py изначально был придуман как учебный инструмент с акцентом на юзабилити и простоту внедрения, так в нём отсутствуют файлы конфигурации проекта. Архитектура web2py была разработана под влиянием фреймворков Ruby on Rails (RoR) и Django. Как и эти фреймворки, web2py нацелен на rapid development, провозглашает приоритет соглашения над конфигурацией и следует Model-View-Controller (MVC) шаблону проектирования.
Обзор Web2py является полнофункциональным фреймворком и содержит встроенные компоненты для всех основных функций, включая: HTTP запросы, HTTP ответы, cookies, Сессии; поддержку множества протоколов HTML/XML, REST, Atom и RSS, RTF и CSV, JSON, JSON-RPC и XML-RPC, AMF-RPC (Flash/Flex), и SOAP; CRUD API; множество механизмов аутентификации и контроля доступа по ролям; уровень абстракции баз данных (DAL) динамически генерирующий SQL запросы и поддерживающий множество совместимых движков баз данных; RAM, НЖМД, and memcached-основанное кэширование для масштабируемости; поддержку интернационализации; jQuery для Ajax и UI эффектов; автоматическое журналирование ошибок вместе с контекстом.
Web2py поощряет лучшие software engineering практики, а именно: Model-View-Controller (MVC) шаблон проектирования; само-отправку веб форм; сессии на стороне сервера (server-side sessions); безопасную обработку загружаемых на сервер файлов.
Web2py использует WSGI, Python-ориентированный протокол для коммуникации между веб сервером и веб приложениями. Также доступны обработчики для CGI и FastCGI протоколов, а в поставку включён многопоточный, поддерживающий SSL WSGI сервер Rocket.
Отличительные особенности
Веб интегрированная среда разработки (IDE) Весь процесс разработки, отладки, тестирования, поддержки и администрирование удалённой базы данных может осуществляться (при желании) без каких-либо сторонних инструментов, через веб интерфейс, которой является в свою очередь web2py приложением. Интернационализация (добавление языков и перевод) также может быть выполнена из этого IDE. Каждое приложение снабжается автоматически сгенерированным интерфейсом администрирования баз данных, по типу Django. Веб интегрированная среда разработки также включает в себя средства тестирования и веб консоль.
Приложения могут быть созданы как из командной строки так и написаны с помощью сторонних IDE.Web2py online IDE with It’s All Text! Firefox addon and Ulipad (open source Python IDE) Доступны дополнительные возможности для отладки: Wing IDE позволяет графически отлаживать приложения web2py. Из браузера вы можете проверять и изменять переменные, вызывать функции и т.д. Eclipse/PyDev — Eclipse с плагином Aptana PyDev также поддерживает web2py. Расширяемый отладчик pdb — модуль стандартной библиотеки Python. С платформонезависимым отладчиком Winpdb, вы можете отлаживать удаленно через шифрованное соединение по TCP/IP.
Классическая Hello World программа на web2py в её простейшем виде (будет показана «голая» веб страничка без шаблона) выглядит так: def hello(): return 'Hello World'
Web2py включает основанный на чистом Python язык шаблонов, не требующий использования отступов и Document Object Model на стороне сервера (DOM).
Шаблонизатор может быть использован и отдельно от web2py. Шаблоны Joomla 1.x могут быть конвертированы в шаблоны web2py.
Web2py также поставляется с двумя библиотеками разметки: фильтром markdown2 text-to-HTML, конвертирующим разметку Markdown в HTML на лету; и markmin схожий с предыдущим но поддерживающий и таблицы, html5 видео\аудио и протокол oembed.
Контроллер в случае отсутствия соответствующего представления автоматически использует универсальное представление отображающее переменные возвращённые контроллером, таким образом позволяя разработку бизнес логики приложения до написания HTML вёрстки. Пример «Hello World» использующий шаблон по умолчанию: def hello(): return dict(greeting='Hello World')
Значение dict() возвращаемое действием (функцией) автоматически выводится в виде HTML если страница запрашивается с расширением .html, в виде JSON если страница запрашивается с расширением .json, в виде XML если страница запрашивается с расширением .xml. Другие протоколы, такие как jsonp, rss, ics, google maps, и тд. поддерживаются и могут быть расширены.
Ниже приведён более сложный пример кода, где определяется таблица и зарегистрированным пользователям предоставляется возможность редактировать её поля:
db.define_table('thing',Field('name',notnull=True))
@auth.requires_login() def hello(): return dict(grid = SQLFORM.grid(db.thing))
Система отслеживания ошибок Каждое web2py приложение снабжено системой отслеживания ошибок: Если возникает ошибка, она записывается в логи и пользователю выдается сообщение, что позволяет отслеживать ошибки. Ошибки и исходный код доступны только администратору, который может искать их по дате и IP клиента. Никакая ошибка не может привести к открытию кода пользователям.
Машинонезависимый cron Cron — механизм для создания и запуска повторяющихся задач в фоновом режиме. Он ищет файл crontab приложения в стандартном формате crontab. Доступны три режима работы:
Мягкий cron: подпрограммы cron проверяются после работы с содержимым веб-страницы, не гарантирует точного выполнения. Для непривилегированных установок Apache CGI / WSGI. Жесткий cron: поток cron запускается при запуске web2py. Для Windows и Rocket/standalone web2py. Системный cron: cron запускается принудительно из командной строки, обычно из системной crontab. Для Unix/Linux систем и мест, где нужно запускать триггеры cron даже если web2py не работает в конкретный момент; также хорош для CGI/WSGI, если у вас есть доступ к системной crontab.
Планировщик задач Начиная с версии 2.3 использование cron не рекомендовано, так как web2py поставляется с планоровщиком. Задачи могут быть определи в моделях и планироваться путём создания записи в базе данных. Пользователи могут запускать процессы, которые выполняют задачи в фоновом режиме. Планировщик лучше, чем cron, потому что он позволяет задать больше параметров (время начала, время завершения, количество повторений, количество попыток в случае ошибки) и лучше работает при постоянном использовании ресурсов.
Распространение в форме байт-кода Web2py может компилировать веб-приложения для распространения в байт-коде без исходного кода. В отличие от фреймворков, которые используют специализированные языки шаблонов, Web2py может также компилировать код и в байт-код, так как это чистый код на Python.
Глобальная среда выполнения
Web2py is unique in the world of Python web frameworks because models and controllers are executed, not imported. They are not modules. They are executed in a single global environment which is initialized at each http request. This design decision has pros and cons.
The major pros is the ease of development, specifically for rapid prototyping. Another pro is that all the objects defined within this environment are cleanly reset at each http request and never shares across requests. This means the developer does not need to worry about changing the state of an object (for example the readable attribute of a database field) or worry about a change leaking to other concurrent requests or other applications. A third advantage is that web2py allows the coexistence of multiple applications under the same instance without conflicts even if they use different versions of the same modules or different modules with the same name.
The main disadvantage of the global environment is that model files and controller files are not modules and the order of execution matters (although it can be specified using conditional models). Naming conflict is more likely to occur than in normal Python modules. Some standard Python development tools may not understand objects defined in models and controllers. Moreover developers must be aware that code in models is executed at every request and this may cause a performance penalty. Nothing in web2py prevents developers from using and importing normal Python modules (model-less approach) and for this purpose web2py provides a thread local object (current) to facilitate access to objects associated to the current request. Yet, in this case, the developer has to be aware of the same pitfalls that other frameworks incur into: changing the state of an object defined in a module may affect other concurrent requests.
Another con is that, because models and controllers are not class-based, efficient code reuse becomes more difficult, particularly as the inability to inherit from a parent controller (e.g. the ApplicationController in Ruby on Rails) means that common controller functionality must be referenced repeatedly across all controller files.
Поддерживаемые платформы
Операционные системы, версии Python, виртуальные машины, аппаратное обеспечение web2py работает на Windows, Windows CE телефонах, Mac, Unix/Linux, Google App Engine, Amazon EC2, почти любом веб хостинге с Python 2.4/2.5/2.6/2.7.
Release versions of web2py include Python 2.5, but the source version can be run on 2.4 through 2.7.
web2py since v1.64.0 runs unmodified on Java with Jython 2.5, without any known limitation.
web2py code can run with IronPython on .NET. Limitations: no csv module (so no database I/O); no third party database drivers (not even SQLite, so no databases at all); no built-in web server (unless you cripple it by removing signals and logging).
The web2py binary will run from a USB drive or a portable hard drive without dependencies, like Portable Python .
Веб серверы Web2py отвечает на запросы сделанные по HTTP и HTTPS с помощью встроенного Rocket сервера, а также Apache, Lighttpd, Cherokee, Hiawatha, Nginx и почти любого другого данного веб сервера поддерживающего CGI, FastCGI, WSGI, mod proxy, и/или mod python.
IDEs и отладчики While a number of web2py developers use text editors such as Vim, Emacs or TextMate Web2py also has a built-in web-based IDE. Others prefer more specialized tools providing debugging, refactoring, etc. Aptana Studio with integrated PyDev Eclipse with PyDev Wing IDE Microsoft Visual Studio with Python Tools for Visual Studio Pycharm3 поддерживает Web2py
Работа с базами данных Уровень абстракции баз данных (DAL) web2py прозрачно и динамически генерирует SQL запросы и выполняет их на множестве совместимых СУБД без необходимости использования специфичных для базы данные SQL команд (в то же время SQL команды также могут быть выполнены напрямую).
SQLite is included in Python and is the default web2py database. A connection string change allows connection to Firebird, IBM DB2, Informix, Ingres, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, and Google App Engine (GAE) with some caveats. Specialities: Multiple database connections. Automatic table creates and alters. Automatic transactions. Distributed transactions: Since web2py v1.17 with PostgreSQL v8.2 and later,Distributed transactions with PostgreSQL Distributed transactions with PostgreSQL — further details because it provides API for two-phase commits. Since web2py v1.70.1 with Firebird and MySQL (experimental). GAE is not a relational store, but web2py emulates certain operations.
DAL обещает высокую скорость работы, по крайней мере по сравнению с SQLAlchemy и Storm.