Web2py

web2py
Тип фреймворк для разработки веб приложений
Автор Massimo Di Pierro
Разработчик web2py developers
Написана на Python
Первый выпуск сентябрь 27, 2007 (2007-09-27)
Аппаратная платформа Cross-platform
Последняя версия
Репозиторий github.com/web2py/web2py
Состояние Активное
Лицензия GNU Lesser General Public License version 3 (LGPLv3)
Сайт web2py.com
mailing list

web2py — фреймворк с открытым исходным кодом для разработки веб приложений, написанный на языке программирования Python. Web2py позволяет веб разработчикам создавать динамические сайты используя Python. Web2py призван сократить рутинные процессы веб разработки, такие как написание веб форм с нуля, хотя разработчик может разработать форму с нуля, если в этом возникнет необходимость.[2]

Web2py изначально был придуман как учебный инструмент с акцентом на юзабилити и простоту внедрения, так в нём отсутствуют файлы конфигурации проекта. Архитектура web2py была разработана под влиянием фреймворков Ruby on Rails (RoR) и Django. Как и эти фреймворки, web2py нацелен на rapid development, провозглашает приоритет соглашения над конфигурацией и следует Model-View-Controller (MVC) шаблону проектирования.

Обзор

Web2py является полнофункциональным фреймворком и содержит встроенные компоненты для всех основных функций, включая:

Web2py поощряет лучшие software engineering практики, а именно:

  • Model-View-Controller (MVC) шаблон проектирования;
  • само-отправку[5] веб форм;
  • сессии на стороне сервера (server-side sessions);
  • безопасную обработку загружаемых на сервер файлов.

Web2py использует WSGI, Python-ориентированный протокол для коммуникации между веб сервером и веб приложениями. Также доступны обработчики для CGI и FastCGI протоколов, а в поставку включён многопоточный, поддерживающий SSL WSGI сервер Rocket[6].

Отличительные особенности

Веб интегрированная среда разработки (IDE)

Весь процесс разработки, отладки, тестирования, поддержки и администрирование удалённой базы данных может осуществляться (при желании) без каких-либо сторонних инструментов, через веб интерфейс, которой является в свою очередь web2py приложением. Интернационализация (добавление языков и перевод) также может быть выполнена из этого IDE. Каждое приложение снабжается автоматически сгенерированным интерфейсом администрирования баз данных, по типу Django. Веб интегрированная среда разработки также включает в себя средства тестирования и веб консоль.

Приложения могут быть созданы как из командной строки так и написаны с помощью сторонних IDE.[7] Доступны дополнительные возможности для отладки:[8]

  • Wing IDE позволяет графически отлаживать приложения web2py. [9] Из браузера вы можете проверять и изменять переменные, вызывать функции и т.д.
  • Eclipse/PyDev — Eclipse с плагином Aptana PyDev также поддерживает web2py.[10][11]
  • Расширяемый отладчик pdb Архивная копия от 24 октября 2012 на Wayback Machine — модуль стандартной библиотеки Python.
  • С платформонезависимым отладчиком Winpdb, вы можете отлаживать удаленно[12] через шифрованное соединение по TCP/IP.[13]

Классическая Hello World программа на web2py в её простейшем виде (будет показана «голая» веб страничка[14] без шаблона) выглядит так:

def hello():
    return 'Hello World'

Web2py включает основанный на чистом Python язык шаблонов, не требующий использования отступов и Document Object Model на стороне сервера (DOM).

Шаблонизатор может быть использован и отдельно от web2py.[15] Шаблоны Joomla 1.x могут быть конвертированы в шаблоны web2py.[16]

Web2py также поставляется с двумя библиотеками разметки: фильтром markdown2 Архивная копия от 19 марта 2014 на Wayback Machine text-to-HTML, конвертирующим разметку Markdown в HTML на лету; и markmin Архивная копия от 19 марта 2014 на Wayback Machine схожий с предыдущим но поддерживающий и таблицы, 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[17]/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.[18]

web2py code can run with IronPython on .NET.[19] 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[20] run from a USB drive or a portable hard drive without dependencies, like Portable Python Архивная копия от 12 ноября 2020 на Wayback Machine.

Веб серверы

Web2py отвечает на запросы сделанные по HTTP и HTTPS с помощью встроенного Rocket сервера,[21] а также Apache,[22] Lighttpd,[23] Cherokee,[24] Hiawatha, Nginx и почти любого другого данного веб сервера поддерживающего CGI, FastCGI, WSGI, mod proxy,[25][26][27] и/или 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.

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

Уровень абстракции баз данных (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,[29][30] 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.[31]

Web2py implements a DAL, not an ORM. An ORM maps database tables into classes representing logical abstractions from the database layer (e.g., a User class or a PurchaseOrder class), and maps records into instances of those classes. The DAL instead maps database tables and records into instances of classes representing sets and records instead of higher-level abstractions. It has very similar syntax to an ORM but it is faster, and can map almost any SQL expressions into DAL expressions. The DAL can be used independently of the rest of web2py.[32]

Ниже приведёны некоторые примеры синтаксиса DAL:

db = DAL('postgresql://user:pass@localhost/db', pool_size=10)
db.define_table('person',Field('name'),Field('image','upload'))
db.person.insert(name='Martin', image=open('filename.png'))
rows = db((db.person.name=='Martin')|db.person.name.contains('T')).select(orderby=db.person.name.lower())

The latest version of the DAL has support for 2D GIS functions with Spatialite and PostGIS. The current API are experimental because of a possible move to 3D APIs.

Автоматизированная миграция баз данных

web2py поддерживает автоматизированную миграцию баз данных — стоит изменить определение таблицы и web2py изменит (ALTER) её соответственно. Migrations are automatic, but can be disabled for any table, and migration is typically disabled when an application is ready for live distribution. Migrations and migration attempts are logged, documenting the changes.

Ограничения:

  • SQLite cannot alter table and change a column type, but rather simply stores new values according to the new type.
  • GAE has no concept of alter-table, so migrations are limited.

Лицензия

Web2py code is released under GNU Lesser General Public License (LGPL) version 3 as of web2py version 1.91.1.[33]

Web2py code before version 1.91.1 was released under GNU GPL v2.0 with commercial exception.

Various third-party packages distributed with web2py have their own licenses, generally Public-domain, MIT or BSD-type licenses. Applications built with web2py are not covered by the LGPL license.

Авторские права на Web2py принадлежат Massimo DiPierro. Торговая марка «web2py framework» принадлежит Massimo DiPierro.

Награды

В 2011 году InfoWorld поставил web2py во главе шести Python веб фреймворков Архивная копия от 15 декабря 2013 на Wayback Machine, присудив web2py награду Bossie 2011 года в номинации best open source application development software. В 2012 году web2py выиграл премию технологии года Архивная копия от 18 апреля 2014 на Wayback Machine за то, что Web2py содержит в себе всё необходимое для создания веб приложений — даже интерпретатор Python. Its creator’s mission to build an easy-to-use framework extends throughout. Web2py’s database abstraction layer allows you to manipulate a variety of databases without having to write any SQL. Once you’ve defined your database tables, Web2py will automatically build an administration interface for your app. In fact, Web2py’s combination console and dashboard is where all your application development activities take place—even editing your application files. Finally, Web2py lets you embed Python code into your Web page’s HTML, so you don’t have to learn a new template language. With all its built-in assistance, Web2py is as painless as it gets.

Библиография

Учебник по web2py

Документация по web2py собрана в Полное справочное руководство Архивная копия от 12 июня 2018 на Wayback Machine, от Massimo DiPierro. The manual is also available in printed form or as a read-only PDF.

  • 1st Edition: out of print. Wiley; September 16, 2008; 256 pages; ISBN 978-0-470-43232-7.
  • 2nd Edition: web2py Manual Архивная копия от 11 мая 2010 на Wayback Machine. Wiley; August 26, 2009; 341 pages; ISBN 978-0-470-59235-9. Read it online Архивная копия от 14 марта 2014 на Wayback Machine. Errata for the book.
  • 3rd Edition: Lulu; September 25, 2010 357 pages; Read it online Архивная копия от 14 марта 2014 на Wayback Machine.
  • 4th Edition: Lulu Архивная копия от 19 марта 2014 на Wayback Machine; December 9, 2011 583 pages; Read it online Архивная копия от 14 марта 2014 на Wayback Machine.
  • 5th Edition: [web2py/web2py_manual_5th.pdf PDF Copy]; March 3, 2013 614 pages; ISBN 978-0-578-12021-8. Read it online Архивная копия от 14 марта 2014 на Wayback Machine.

Онлайн документация

Online documentation Архивная копия от 19 марта 2014 на Wayback Machine is linked from the web2py home page, with cookbook, videos, interactive examples, interactive API reference, epydoc s (complete library reference), FAQ, cheat sheet, online tools etc.

  • Cheat sheet for web2py Архивная копия от 15 сентября 2014 на Wayback Machine.
  • web2pyslices Архивная копия от 18 марта 2014 на Wayback Machine, recipes posted using the movuca social network in web2py.
  • Crash Course in Web2py (5-part series) Архивная копия от 16 марта 2014 на Wayback Machine.
  • Web2py slides Архивная копия от 13 апреля 2013 на Wayback Machine (old).

Видео

  • web2py Enterprise Web Framework Tutorial Архивная копия от 25 апреля 2014 на Wayback Machine.
  • web2py «Shootout» video tutorial Архивная копия от 19 марта 2014 на Wayback Machine.
  • web2py on the Google appengine Архивная копия от 25 апреля 2014 на Wayback Machine.
  • web2py: Create, edit, and deploy a basic web app Архивная копия от 31 июля 2017 на Wayback Machine.

Печатные материалы

  • «web2py application development cookbook» Архивная копия от 17 июля 2014 на Wayback Machine, Packt, 2012
  • Web programming with web2py; Python Magazine; Marco Tabini & Associates, Inc.; June 2008

Общие сведения

Поддержка

Community support is available through the web2py knowledge base Архивная копия от 19 марта 2014 на Wayback Machine, the web2py mailing list Архивная копия от 25 июня 2012 на Wayback Machine at Google Groups, and the #web2py channel on freenode.[34] As of 2009-10-02, commercial web2py support is provided by fifteen companies worldwide.[35]

Разработчики

Ведущим разработчиком web2py является профессор Massimo DiPierro, доцент Computer Science в университете DePaul University в городе Chicago. As of 2011, the web2py homepage lists over 70 «main contributors».[36]

Исходный код

Исходный код web2py доступен из двух репозиториев:

Сторонние компоненты используемые в web2py

  • Python-based components:
    • Rocket, a fast, HTTP/1.1-compliant, multi-threaded, SSL-enabled and streaming-capable WSGI server;
    • fcgi.py: a FastCGI/WSGI gateway;
    • Login API for Janrain, Dropbox, Google, LDAP, PAM, X509, CAS, OpenID, OAuth 1&2, Loginza
    • simplejson Архивная копия от 5 января 2006 на Wayback Machine: a simple, fast, complete, correct and extensible JSON encoder and decoder;
    • markdown2 Архивная копия от 19 марта 2014 на Wayback Machine: a Markdown processor;
    • fpdf Архивная копия от 27 января 2014 на Wayback Machine a library for PDF generation;
    • PyRTF Архивная копия от 6 декабря 2013 на Wayback Machine: an RTF document generator;
    • a syntax highlighter;
    • pysimplesoap Архивная копия от 23 января 2014 на Wayback Machine for SOAP services;
    • PyRSS2Gen Архивная копия от 19 марта 2014 на Wayback Machine: an RSS generator;
    • feedparser Архивная копия от 13 апреля 2014 на Wayback Machine: to parse RSS and Atom feeds.
  • JavaScript-based components:
  • C-based components:
    • SQLite: a relational database;
    • memcached: a general-purpose distributed memory caching system.
    • Payment API for Authorize.Net, Google Wallet, Stripe.com

История и название

Исходный код первой общедоступной версии web2py был опубликован под лицензией GNU GPL v2.0 27 сентября 2007 года Massimo DiPierro под названием Enterprise Web Framework (EWF). Из-за конфликта наименований имя пришлось менять два раза: EWF v1.7 было заменено на Gluon v1.0, а за Gluon v1.15 последовало web2py v1.16. Лицензия была сменена на LGPLv3 с выпуском web2py версии 1.91.1 2010-12-21.

Приложения созданные с использованием Web2py

  • Movuca CMS и движок социальной сети.
  • Instant Press Блог платформа.
  • Ourway Социальная сеть.
  • NoobMusic Портал о рок музыке.
  • LinkFindr Инструмент диагностики вычислительной сети.
  • StarMaker Создание karaoke музыкально-социальных приложений.

A longer list with screenshots can be found here Архивная копия от 14 марта 2014 на Wayback Machine and here Архивная копия от 19 марта 2014 на Wayback Machine. A list of plugins can be found here

Заметки

  1. web2py Web Framework
  2. Web2py (2013), What is web2py?, web2py.com, retrieved 11 October 2013, <http://www.web2py.com/init/default/what Архивная копия от 17 января 2020 на Wayback Machine>
  3. Web2py поддерживает множество протоколов начиная с версии v1.63  (неопр.). Дата обращения: 19 марта 2014. Архивировано 24 апреля 2018 года.
  4. Using SOAP with web2py  (неопр.). Дата обращения: 19 марта 2014. Архивировано 24 апреля 2018 года.
  5. Writing Smart Web-based Forms  (неопр.). Дата обращения: 19 марта 2014. Архивировано из оригинала 30 июня 2017 года.
  6. Rocket Web Server  (неопр.). Дата обращения: 19 марта 2014. Архивировано 29 ноября 2020 года.
  7. Web2py online IDE Архивная копия от 8 сентября 2012 на Wayback Machine with It’s All Text! (недоступная ссылка) Firefox addon and Ulipad Архивная копия от 12 марта 2014 на Wayback Machine (open source Python IDE)
  8. How to debug Web2py applications?  (неопр.) Дата обращения: 19 марта 2014. Архивировано 19 марта 2014 года.
  9. Wing IDE supports debugging for web2py  (неопр.). Дата обращения: 19 марта 2014. Архивировано 12 февраля 2014 года.
  10. Eclipse/PyDev supports debugging for web2py  (неопр.). Дата обращения: 19 марта 2014. Архивировано 13 февраля 2010 года.
  11. Using web2py on Eclipse  (неопр.). Дата обращения: 19 марта 2014. Архивировано 19 декабря 2010 года.
  12. With Winpdb one can do remote debugging over TCP/IP  (неопр.). Дата обращения: 19 марта 2014. Архивировано из оригинала 9 ноября 2015 года.
  13. Encrypted communication in Winpdb  (неопр.). Дата обращения: 19 марта 2014. Архивировано из оригинала 9 ноября 2015 года.
  14. Simplest web page with web2py: «Hello World» example  (неопр.). Дата обращения: 19 марта 2014. Архивировано 29 мая 2019 года.
  15. How to use web2py templates without web2py  (неопр.). Дата обращения: 19 марта 2014. Архивировано 14 февраля 2012 года.
  16. Using Joomla templates with web2py  (неопр.). Дата обращения: 19 марта 2014. Архивировано 24 апреля 2018 года.
  17. How to run web2py with Python 2.4  (неопр.). Дата обращения: 19 марта 2014. Архивировано 31 октября 2013 года.
  18. Web2py runs fully on Java and J2EE using Jython  (неопр.). Дата обращения: 19 марта 2014. Архивировано 9 ноября 2012 года.
  19. Web2py runs with IronPython on .NET, with limitations  (неопр.). Дата обращения: 19 марта 2014. Архивировано 25 апреля 2014 года.
  20. MySQL with web2py Windows binary on a USB thumb-drive  (неопр.). Дата обращения: 19 марта 2014. Архивировано 26 мая 2012 года.
  21. How to run the built-in SSL server  (неопр.). Дата обращения: 19 марта 2014. Архивировано 15 апреля 2015 года.
  22. Web2py with Apache and mod_ssl  (неопр.). Дата обращения: 19 марта 2014. Архивировано 7 июня 2012 года.
  23. Web2py with Lighttpd and FastCGI  (неопр.). Дата обращения: 19 марта 2014. Архивировано 25 апреля 2014 года.
  24. Web2py with Cherokee  (неопр.). Дата обращения: 19 марта 2014. Архивировано 2 декабря 2013 года.
  25. Apache Module mod_proxy  (неопр.). Дата обращения: 19 марта 2014. Архивировано 10 февраля 2011 года.
  26. Web2py with mod_proxy  (неопр.). Дата обращения: 19 марта 2014. Архивировано 31 октября 2013 года.
  27. Web2py with mod_proxy and mod_proxy_html  (неопр.). Дата обращения: 19 марта 2014. Архивировано 18 марта 2014 года.
  28. Using Wing IDE with web2py  (неопр.). Дата обращения: 19 марта 2014. Архивировано 12 февраля 2014 года.
  29. Distributed transactions with PostgreSQL Архивировано 14 апреля 2009 года.
  30. Distributed transactions with PostgreSQL — further details
  31. ORM Benchmark  (неопр.). Дата обращения: 19 марта 2014. Архивировано 31 октября 2013 года.
  32. How to use web2py DAL without web2py  (неопр.). Дата обращения: 19 марта 2014. Архивировано 1 ноября 2013 года.
  33. web2py License Agreement  (неопр.). Дата обращения: 19 марта 2014. Архивировано 25 апреля 2014 года.
  34. IRC #web2py channel Архивировано 27 октября 2009 года.
  35. Commercial support for web2py  (неопр.). Дата обращения: 19 марта 2014. Архивировано 19 марта 2014 года.
  36. List of main contributors to web2py  (неопр.). Дата обращения: 19 марта 2014. Архивировано 19 марта 2014 года.

Ссылки

  • web2py.com — официальный сайт Web2py
  • Gallery of sites powered by web2py Архивная копия от 14 марта 2014 на Wayback Machine
  • Ready-to-use web2py appliances Архивная копия от 29 ноября 2009 на Wayback Machine
  • Electronic Purchase Order System Архивная копия на Wayback Machine
  • Snippets, recipes and tricks Архивная копия от 17 февраля 2012 на Wayback Machine
  • Web2py template editing under emacs Архивная копия от 18 сентября 2020 на Wayback Machine
Перейти к шаблону «Python»
Сообщество
Реализации
Другое