Простое веб приложение на python. Влияние языка на архитектуру приложения. Что такое Python, и зачем его изобрели

Язык программирования Python широко применяется для создания web-сайтов и используется для решения различных проблем и задач которые возникают перед программистом. Во-первых, код на языке программирования Python предоставляет простые и удобные методы для генерирования набора статических HTML-страниц, которые будут обслуживаться веб-сервером.

В нынешнее время ноутбук практически вытеснил персональный компьютер. А ведь не так давно он являлся всего лишь переносным дополнением к нему, необходимым человеку, который часто путешествует или отправляется в командировки. Однако комфорт, небольшие габариты, а также производство ведущими фирмами мощнейших машин, которые могут выполнять сложнейшие задачи, превратил ноутбук в очень популярное устройство. И не только среди среднего уровня пользователей, которые эксплуатируют его всего лишь для просмотра фильмов и сёрфинга по Интернету. Сегодня им пользуются многие веб-программисты в своей профессиональной деятельности.

Как уже упоминалось в одной из моих заметок, знак копирайта – это специальный символ, который обозначает авторство того или иного объекта, на который могут распространяться нормы законодательных актов, которые регулируют процедуры защиты авторского права.

Сам по себе знак копирайта, разумеется, защитить ничего не может, поэтому его наличие совершенно не гарантирует автору, что его произведение не будет скопировано. Иногда даже злостные плагиаторы ставят свой копирайт под чужими произведениями. Однако, в случае действительного авторства ставить знак копирайта крайне желательно и не стоит пренебрегать этой возможностью.

Но оказалось, что большинство людей, так или иначе связанных с творением текстов, попросту не знают КАК проставить знак копирайта, точнее как набрать его на клавиатуре. На мой вопрос как это сделать практически все ответили, что нужно в каком-либо из текстовых редакторов Word или OpenOffice Writer зайти во вкладку “Добавить символ” и выбрать из таблички значок ©

Сегодня человечество уже не мыслит свою жизнь без компьютера . Играть в компьютерные игры, знакомиться с друзьями в социальных сетях, работать в прикладных программах – стало обычным делом. Всё это связано с работой специального программного обеспечения. Для его написания требуется знание особого языка понимаемого компьютером – языка программирования.

Насчитывается несколько десятков основных языков программирования. Одни придуманы для создания только определённого вида программного обеспечения, на других можно написать практически любое. Но существуют и родоначальники. Кратко ознакомимся с основными экземплярами.

Я занимаюсь некоторой работой на python, но это все для автономных приложений. Мне любопытно узнать, поддерживает ли какое-либо ответвление python в веб-разработке?

Будет ли кто-то также предлагать хороший учебник или веб-сайт, откуда я могу забрать некоторые основы веб-разработки с помощью python?

9 Solutions collect form web for “Использование python для разработки веб-приложения”

Теперь, когда все сказали Django , я могу добавить свои два цента: я бы сказал, что вы можете узнать больше, сначала посмотрев на разные компоненты, прежде чем использовать Django. Для веб-разработки с Python вам часто нужны 3 компонента:

    Что-то, что заботится о HTTP-материале (например, CherryPy)

    Язык шаблонов для создания ваших веб-страниц. Мако очень pythonic и работает с Cherrpy.

    Если вы получаете данные из базы данных, ORM пригодится. Пример SQLAlchemy .

Все ссылки выше имеют хорошие учебные пособия. Для многих случаев использования в реальном времени Django будет лучшим решением, чем такой стек, поскольку он легко интегрирует эту функциональность (и многое другое). И если вам нужна CMS, Django – ваш лучший выбор, кроме Zope. Тем не менее, чтобы получить хорошее представление о том, что происходит, может быть лучше стека слабо связанных программ. Джанго скрывает много деталей.

Отредактировано 3 года спустя : Не используйте mod_python, используйте mod_wsgi. Flask и Werkzeug – хорошие рамки. Нужно знать, что происходит, полезно, но это не требование. Это было бы глупо.

Не просматривайте Django, пока вы не поймете, что Django делает от вашего имени. для тебя. Напишите некоторые базовые приложения, используя mod_python и объект запроса. Я только начал изучать Python для веб-разработки с помощью mod_python, и это было здорово.

mod_python также использует диспетчер в site-packages / mod_python / publisher.py. У вас есть ganders, чтобы увидеть, как запросы могут обрабатываться простым способом.

Возможно, вам потребуется добавить немного конфига в конфигурационный файл Apache, чтобы получить mod_python и запустить его, но сайт mod_python объясняет это хорошо.

AddHandler mod_python .py PythonHandler mod_python.publisher PythonDebug On

И ты далеко!

использовать (как тупо базовый пример):

Def foo(req): req.write("Hello World")

в /path/to/python/files/bar.py предполагается, что /path/to является вашим корнем сайта.

И тогда вы можете сделать

Http://www.mysite.com/python/files/bar/foo

увидеть «Hello World». Кроме того, что-то, что меня сбило с толку, – это диспетчер, использующий хромовый метод для разработки типа контента, поэтому для принудительного использования HTML:

Req.content_type = "text/html"

Удачи

После того, как вы хорошо поймете, как Python взаимодействует с mod_python и Apache, используйте фреймворк, который делает для вас все скучные вещи. До вас, хотя, только моя рекомендация

Если вы действительно не хотите вникать в рамки – и вы должны, я от всей души рекомендую Django или Pylons – по-прежнему нужно идти по дороге CGI. Это совершенно устаревшая технология, не говоря уже о медленных и неэффективных.

Существует стандартный способ создания веб-приложений Python, и он называется WSGI . Если вы хотите свернуть свое собственное веб-приложение с нуля, это абсолютно путь.

Тем не менее, если вы только начинаете, действительно вам стоит пойти с одной из фреймворков.

Python Wiki: веб-фреймворки для Python

Если вы решите использовать Django , официальный учебник станет отличным местом для начала. Книга Джанго также бесплатна.

Есть несколько вариантов для веб-разработки. По моему опыту, ваш выбор снова будет зависеть от вашего приложения. Я использовал django и web.py в производстве, и я собираюсь развернуть приложение на основе пилонов.

Django скрывает множество вариантов (поставляется с ORM и шаблонами). Документация обширна и хорошо написана. Для django доступно много многоразовых приложений, но вы, вероятно, потратите немного времени на их интеграцию. Одна вещь, упомянутая на djangocon 08, заключалась в том, что в джанго есть классные вещи, к которым нельзя легко получить доступ в проектах, не связанных с джанго.

web.py впечатлил меня своей простой простотой. Прежде чем я это узнал, я написал небольшое приложение (78 строк квази-вики).

пилоны чувствуют себя как в середине обоих. Я могу использовать sqlalchemy и jinja , и все это приятный опыт для начала.

Поиск Django.

Python может использоваться для веб-разработки, но не существует специального языкового расширения или чего-либо еще на языке, который будет обрабатывать все поколения HTML или работает как PHP.

В значительной степени он запускается через какой-то интерпретатор на веб-сервере (CGI, mod_python и т. Д.).

Существует много веб-фреймворков для python, но единственное, что я использовал, это Django , и мне это очень нравится.

Если у вас есть несколько часов, сделайте учебник, я обещаю вам, вам понравится 🙂

Как отмечали другие, одним из наиболее заметных «ответвлений» питона, как вы их называете, будет Django . Это довольно мощная структура, которая позволяет быстро и надежно создавать веб-приложения. Первое, что нужно посмотреть, это их обзор, который дает некоторое представление о том, что Django делает в качестве основы.

Пройдя через их учебник, я много рассказывал об известном шаблоне проектирования Model-View-Controler и о том, как он может использоваться в контексте веб-разработки. Я нашел отличный способ начать писать приложение, которое работало и училось, улучшив его.

Dash - библиотека пользовательского интерфейса для создания аналитических веб-приложений. Она будет полезна для тех, кто использует Python для анализа и исследования данных, визуализации, моделирования и отчётности.

Dash значительно упрощает создание GUI (графических пользовательских интерфейсов) для анализа данных. Вот пример приложения на Dash из 43 строк кода, который связывает выпадающее меню с графиком D3.js. Когда пользователь выбирает значение в выпадающем списке, код динамически экспортирует данные из Google Finance в Pandas DataFrame:

Код Dash является декларативным и реактивным, что упрощает создание сложных приложений, содержащих множество интерактивных элементов. Вот пример с 5 входными данными, 3 - выходными и с перекрёстной фильтрацией. Это приложение было написано на Python, и в нём всего лишь 160 строк кода:

Приложение на Dash с несколькими входными и выходными данным.

Для каждого элемента приложения можно задать собственные параметры размера, расположения, цвета и шрифта. Приложения на Dash создаются и публикуются в Сети, поэтому к ним можно применить всё, на что способен CSS. Ниже иллюстрируется пример тонко настраиваемого интерактивного приложения отчётности на Dash, выполненного в стиле отчёта финансовой организации Goldman Sachs.

Тонко настраиваемое приложение Dash, созданное в стиле отчёта финансовой организации Goldman Sachs.

Вам не нужно писать какой-либо код на JavaScript или HTML, когда ваше приложение на Dash запущено в веб-браузере. Dash предоставляет богатый набор интерактивных веб-компонентов.

Import dash_core_components as dcc dcc.Slider(value=4, min=-10, max=20, step=0.5, labels={-5: "-5 Degrees", 0: "0", 10: "10 Degrees"})

Пример простого ползунка на Dash

Dash предоставляет простой реактивный декоратор для привязки вашего кода анализа данных к пользовательскому интерфейсу Dash.

@dash_app.callback(Output("graph-id", "figure"), ) def your_data_analysis_function(new_slider_value): new_figure = your_compute_figure_function(new_slider_value) return new_figure

Когда изменяется входной элемент (например, при выборе элемента в выпадающем списке или при передвижении ползунка), декоратор Dash предоставляет вашему коду Python новое входное значение.

Ваша функция Python может выполнять различные действия с новым входным значением: может фильтровать объект DataFrame библиотеки Pandas, выполнять SQL-запрос, запускать симуляцию, выполнять вычисления или запускать тестирование. Dash рассчитывает, что ваша функция вернёт новое свойство для какого-нибудь элемента пользовательского интерфейса, будь то новый график, новая таблица или новый текст.

В качестве примера ниже представлено приложение на Dash, которое обновляет текстовый элемент при взаимодействии с графиком. Код приложения фильтрует данные в Pandas DataFrame на основе выбранной точки:

Приложение ниже отображает метаинформацию о лекарственных веществах при наведении курсора на точки в графике. Код приложения также добавляет строки в таблицу, когда появляются новые компоненты в выпадающем списке.

Благодаря этим двум разделениям между компонентами Python и реактивными функциональными декораторами, Dash разграничивает все технологии и протоколы, необходимые для создания интерактивного веб-приложения. Dash достаточно прост, чтобы привязать пользовательский интерфейс к коду Python за один вечер.

Архитектура

Flask и React.js

Приложения на Dash - веб-серверы, которые запускают Flask и связывают пакеты JSON через HTTP-запросы. Интерфейс Dash формирует компоненты, используя React.js.

Flask - великолепный фреймворк, который широко используется сообществом разработчиков Python во многих проектах. Основной экземпляр Flask и все его настраиваемые свойства доступны разработчикам приложений на Dash. Продвинутые разработчики могут расширить возможности приложений с помощью богатой коллекции плагинов Flask.

React.js также великолепен, например, мы переписали всю нашу веб-платформу и наш онлайн-редактор диаграмм с помощью React. Но есть кое-что, что действительно радует насчёт React - активный и талантливый состав сообщества разработчиков, который опубликовал тысячи высококачественных компонентов, начиная с выпадающих списков и слайдеров , заканчивая календарями и . И всё это публикуется с открытым исходным кодом!

Dash использует мощь Flask и React, подстраивая их под работу с Python для специалистов по анализу и обработке данных, которые могут не быть экспертами в области веб-разработки.

От React.js к компонентам Python

Компоненты Dash - это классы Python, которые кодируют свойства и значения конкретного компонента React и упорядочиваются как JSON. Dash предоставляет набор инструментов для лёгкой упаковки компонентов React в вид компонентов, которые могут быть использованы в Dash. Этот набор инструментов использует динамическое программирования для автоматического создания классов Python из аннотированного свойства React - propTypes . На выходе классы Python, которые представляют компоненты Dash, являются удобными для пользователя, так как они имеют автоматическую проверку аргументов, строк документации и прочее.

Вот пример динамически сгенерированной проверки ошибочного аргумента:

>>> import dash_core_components as dcc >>> dcc.Dropdown(valu=3) Ошибка: неизвестный ключевой аргумент `valu` Допустимые аргументы: id, className, disabled, multi, options, placeholder, value

Пример динамически создаваемых строк документации:

>>> help(dcc.Dropdown) class Dropdown(dash.development.base_component.Component) | Компонент выпадающего списка. | Компонент выпадающего списка служит для выбора одного или более | элементов. | значения и названия элементов выпадающего списка определяются в `options` | свойство и выбранный элемент(ы) определяются свойством `value`. | | используйте выпадающий список, только если у вас много вариантов выбора (больше 5), или | когда вы ограничены пространством. В противном случае вы можете использовать переключатели или чекбоксы, | Которые покажут сразу все элементы пользователю. | | Аргументы ключевых слов: | - id (строка; необязательный) | - className (строка; необязательный) | - disabled (логический тип; необязательный): если true, выбор блокируется | - multi (логический тип; необязательный): если true, пользователь может выбрать несколько значений | - options (список; необязательный) | - placeholder (строка; необязательный): серый текст по умолчанию, если ничего не выбрано | - value (строка | список; необязательный): значение поля ввода. Если `multi` false (по умолчанию), | то value - строка, соответствующая своим значениям, | указанным в свойстве `options`. Если `multi` - true, то | можно выбрать сразу несколько значений, а `value` - | массив элементов со значениями, соответствующими в свойстве | `options`. | | Доступные события: "change

Полный набор HTML-тегов (наподобие div , img , table) также обрабатывается с помощью React, а их классы Python доступны через библиотеку dash_html_component . Основной набор интерактивных компонентов, таких как Dropdown , Graph , Slider , будет поддерживаться командой Dash через dash_core_components . Обе библиотеки используют стандартный набор инструментальных средств React-to-Dash с открытым исходным кодом, который вы могли бы использовать при необходимости написания своей собственной библиотеки компонентов.

Ваше приложение автоматически не привязывается к библиотеке компонентов Dash. Библиотека компонентов импортируется отдельно от основной библиотеки Dash. С помощью набора инструментальных средств React-to-Dash можно легко записать или перенести компонент React.js в класс Python, который можно использовать в приложении Dash. На официальном сайте вы найдёте руководство по созданию собственных компонентов или можете попросить команду разработчиков Dash написать их для вас.

Многопользовательские приложения

Свойства приложения на Dash хранятся в интерфейсе (в браузере). Это позволяет использовать приложения, написанные с использованием Dash, в многопользовательском режиме: может быть открыто несколько независимых друг от друга сессий, в которых действия одних пользователей не будут влиять на данные других пользователей. Код приложения на Dash является функциональным: он может считывать значения из глобальных свойств Python, но не может вносить в них изменения. Этот функциональный подход можно легко обосновать и протестировать - это просто входные и выходные данные без каких-либо побочных эффектов или свойств.

CSS и стили

CSS и стили по умолчанию хранятся вне базовой библиотеки, чтобы сохранить принцип модульности и независимого управления версиями и чтобы подтолкнуть разработчиков Dash-приложений настраивать вид своих приложений. Команда Dash разместила руководство по основным стилям.

Визуализация данных

Библиотека Dash поставляется с компонентом Graph, который отвечает за отображение диаграмм с помощью Plotly.js. Библиотека Plotly.js отлично подходит к Dash (отличное дополнение), так как она декларативна и имеет открытый исходный код. Кроме того, она поддерживает полный спектр научных, финансовых и деловых диаграмм. Она создана на основе D3.js (для диаграмм типографического качества и экспорта векторных изображений) и WebGL (для высокопроизводительной визуализации).

В библиотеке Dash элемент Graph использует тот же синтаксис, что и библиотека Plotly.py с открытым исходным кодом, что даёт вам возможность легко переключаться между ними. Компонент Graph подключается к системе событий Plotly.js, позволяя авторам писать приложения, которые реагируют на наведение курсора, щелчки и выбор определённых точек на графиках Plotly.

Репозитории с открытым исходным кодом

  • документация и руководство по Dash;
  • Plotly.js  -JavaScript- библиотека, используемая Dash.

Прототипирование

Dash - это новая библиотека в среде Python, однако концепции и идеи, на которых строится Dash, существуют в течение десятилетий на разных языках и в разных приложениях.

Если вы разбираетесь в Excel, значит, вам будет проще разобраться и в Dash. Ведь они оба используют «реактивную» модель программирования. В Excel ячейки с выходными данными обновляются автоматически при изменении параметров ячеек с входными данными. Любая ячейка может быть входной или выходной или и тем, и другим. В ячейках с входными данными нет информации о том, какие ячейки с выходными данными зависят от них, что упрощает добавление новых ячеек с выходными данными или позволяет связать несколько ячеек. Вот пример Excel-приложения:

Можно провести аналогию для Dash. Вместо ячеек у нас есть богатый спектр веб-компонентов, таких как ползунки, поля ввода, выпадающие списки и графики. Вместо написания сценария Excel или VBA мы пишем код Python. Ниже представлено то же самое приложение, но в этот раз оно написано на Dash:

App.layout = html.Div([ html.Label("Hours per Day"), dcc.Slider(id="hours", value=5, min=0, max=24, step=1), html.Label("Rate"), dcc.Input(id="rate", value=2, type="number"), html.Label("Amount per Day"), html.Div(id="amount"), html.Label("Amount per Week"), html.Div(id="amount-per-week") ]) @app.callback(Output("amount", "children"), ) def compute_amount(hours, rate): return float(hours) * float(rate) @app.callback(Output("amount-per-week", "children"), ) def compute_amount(amount): return float(amount) * 7

Некоторым разработчикам нравится этот пример, потому что Excel по-прежнему занимает доминирующее положение даже в технических вычислениях и в финансовой математике. Я не думаю, что доминирующее положение Excel - это технический вопрос. В конце концов, есть легионы программистов, которые изучили нюансы Excel, VBA и даже SQL.

Более того, таблицы Excel легче распространять, чем программы на Python, а ячейки Excel легче редактировать, чем аргументы командной строки.

Тем не менее, моделирование в Excel имеет известные ограничения: эти таблицы часто становятся слишком большими или уязвимыми, чтобы переводить их на производственный уровень, проводить экспертную оценку или тестировать и поддерживать. Вам ведь знаком случай со знаменитой опечаткой в 2013 году?

Надеемся, что Dash сделает использование Python в проектах по обработке данных проще. Благодаря одним и тем же функциональным и реактивным принципам, можно так же легко написать приложение на Dash, как написать аналитическую таблицу. Это, безусловно, более мощный и презентабельный инструмент.

Фреймворк Shiny

Если вы программируете на R, вам повезло. Shiny - это реактивный фреймворк для создания веб-приложений на чистом R, и это отлично! Вы даже можете создавать интерактивные графики с библиотекой Shiny или Plotly для R . Dash и Shiny похожи, но Dash не стремится быть копией Shiny, так как философии Python и R достаточно различаются, что приводит к необходимости использования разного синтаксиса.

Интерактивное веб-приложение, созданное с помощью Shiny на языке R.

Структурирование данных с MATLAB

Если вы программируете на MATLAB, то вам, возможно, знакома GUIDE - библиотека пользовательского интерфейса для MATLAB. Компания Mathworks была одной из новаторов в области технических вычислений. GUIDE была написана в далёком 2004 году.

Приложение, созданное с помощью библиотеки GUIDE на MATLAB.

Если ваши данные структурированы в базе данных, вы могли бы использовать Tableau или любой другой BI-инструмент. Tableau - восхитительный инструмент. Компания установила новый вектор развития в своей отрасли, согласно которому, у конечного пользователя должна быть автономия, чтобы он мог иметь возможность исследовать данные внутри своей организации. Компания также помогла сделать популярнее концепции детализации данных и перекрёстной фильтрации.

Перекрёстная фильтрация в Tableau.

Dash также служит дополнением к BI-инструментам, наподобие вышеупомянутых. Они отлично подходят для структурирования данных. Но когда дело доходит до преобразования данных и аналитики, превзойти размах и гибкость языков программирования и сообществ, вроде Python, становится труднее. Dash абстрагируется от множества сложностей в создании пользовательских интерфейсов, позволяя вам сделать это красиво для вашей аналитической базы данных.

Виджеты Jupyter

Наконец, пришло время рассказать о виджетах Jupyter. Они обеспечивают действительно приятный фреймворк внутри интерфейса Notebook. Вы можете добавлять ползунки к вашим графикам в Jupyter Notebook.

Виджеты в Dash похожи на виджеты Jupyter. В Jupyter Notebooks есть возможность добавлять виджеты непосредственно рядом с кодом. В Dash элементы управления хранятся отдельно от вашего кода. Dash больше нацелена на приложения для распространения, чем на распространяемый код и документацию. Вы всегда можете смешивать и сопоставлять инструменты, создавая свои приложения на Dash в среде Jupyter Notebook.

Команде разработчиков Dash также очень нравится проект nteract , который действительно снижает порог вхождения в Python и Jupyter Notebook, позволяя упаковать Jupyter Notebook в виде настольного приложения.

Лицензирование и бизнес-модель с открытым исходным кодом

Стартап поддерживает библиотеки с открытым исходным кодом для Python, R и MATLAB, которые взаимодействуют с plotly.js. Компания также поддерживает веб-приложение для создания диаграмм и подключения их к базам данных (стыковочные библиотеки также распространяются с открытым исходным кодом).

Если вы используете локальную версию с открытым исходным кодом, в таком случае ограничений нет. Вы можете управлять развёртыванием Dash-приложений самостоятельно через платформы вроде Heroku или Digital Ocean.

Если вы ищите вдохновение для создания своих пользовательских интерфейсов в области технических вычислений, рекомендуем прочитать статью Брета Виктора

Вам также может понравиться проект Explorable Explanations , который специализируется на интерактивном обучении.

Программирование Web-клиента — мощная техника для создания запросов в Web. Web-клиент — это любая программа, извлекающая данные с Web-сервера при помощи протокола передачи гипертекста (Hyper Text Transfer Protocol, http в ваших URL). Web-броузер является клиентом, так же, как и поисковики, то есть программы, автоматически перемещающиеся по Web для сбора информации. Вы можете также применять Web-клиенты для использования возможностей сервисов, предлагаемых другими обитателями Web, и добавления динамических свойств в ваш собственный Web-сайт.

Программирование Web-клиента входит в любой набор инструментов для разработчиков. Приверженцы Perl’а используют его многие годы. В языке Python этот процесс достигает даже более высоких уровней удобства и гибкости. Большинство необходимых вам функций обеспечивается тремя модулями: HTTPLIB, URLLIB и новым дополнением, XMLRPCLIB. В истинно Питоновском стиле каждый модуль надстроен над своим предшественником, обеспечивая таким образом прочную, хорошо спроектированную базу для ваших приложений. В этой статье мы рассмотрим первые два модуля, оставив XMLRPCLIB на потом.

Для наших примеров мы будем использовать Meerkat. Если вы похожи на меня, вы тратите время на отслеживание тенденций и событий в среде создателей открытых программных средств, которые позволят вам получить конкурентные преимущества. Meerkat представляет собой инструмент, значительно упрощающий эту задачу. Это служба открытого доступа (an open wire service), собирающая и упорядочивающая огромные объемы информации по открытым программным средствам. Поскольку его интерфейс для браузера гибок и настраиваем, то, используя программирование web-клиента, мы можем сканировать, извлекать и даже сохранять эту информацию для последующего использования в автономном режиме. Сначала мы обратимся к Meerkat с помощью HTTPLIB в интерактивном режиме, а затем перейдем к работе с Meerkat’s Open API через URLLIB, чтобы создать настраиваемое средство сбора информации.

HTTPLIB

HTTPLIB представляет собой простую обертку вокруг модуля socket. Из трех упомянутых мною библиотек, HTTPLIB обеспечивает наибольший контроль при обращении к web-сайту. Это дается, однако, за счет увеличения объема работы, необходимого для выполнения вашей задачи. Протокол http не имеет текущего состояния ("stateless") и поэтому ничего не помнит о ваших предыдущих запросах. При соединении с Web-сайтом для каждого запроса вы должны построить новый объект HTTPLIB. Эти запросы образуют диалог с Web-сервером, подражая Web-браузеру. Давайте интерактивно подсоединимся к Meerkat с помощью Open API Рейла Дорнфеста (Rael Dornfest) и посмотрим, что получится. Диалог начинается с построения серии предложений, определяющих сначала, какое действие вы хотите предпринять, а затем идентифицирующее вас для Web-сервера:

>>> import httplib >>> host = "www.oreillynet.com" >>> h = httplib.HTTP(host) >>> h.putrequest("GET", "/meerkat/?_fl=minimal") >>> h.putheader("Host", host) >>> h.putheader("User-agent", "python-httplib") >>> h.endheaders() >>>

Запрос GET сообщает серверу, какую страницу вы хотите получить. Заголовок Host сообщает ему имя запрашиваемого вами домена. Современные сервера, использующие HTTP 1.1, могут иметь несколько доменов по одному и тому же адресу. Если вы не говорите им, какой домен вам нужен, в качестве кода возврата вы получите код переадресации ‘302’. Заголовок User-agent сообщает серверу, к какому типу клиента вы относитесь, чтобы знать, что он может вам посылать, а что нет. Это вся информация, необходимая для обработки вашего запроса Web-сервером. Далее вы запрашиваете ответ:

>>> returncode, returnmsg, headers = h.getreply() >>> if returncode == 200: #OK ... f = h.getfile() ... print f.read() ...

В результате этого будет распечатана текущая страница Meerkat в минимальном виде. Заголовок отклика и содержимое возвращаются отдельно друг от друга, что помогает как в определении и устранении проблем, так и в разборе данных. Если вы хотите увидеть заголовки отклика, используйте print headers.

HTTPLIB скрывает механику программирования сокетов, и использование им файлового объекта для буферизации позволяет вам применять привычный подход к манипуляции данными. Тем не менее, лучше он подходит как базовый блок для построения более мощных Web?клиентских приложений или для интерактивного общения с проблемным Web-сайтом. Для использования в обеих этих областях, HTTPLIB оснащен полезной возможностью отладки. Доступ к ней вы получаете, вызывая метод h.set_debuglevel(1) в любой момент после инициализации объекта (строка h = httplib.HTTP(host) в нашем примере). С уровнем отладки 1, модуль будет дублировать на экран запросы и результаты любых обращений к getreply().

Интерактивная природа Python делает процесс анализа Web-сайтов с помощью HTTPLIB развлечением. Привыкните к этому модулю, и у вас будет мощный и гибкий инструмент для диагностики проблем Web-сайтов. Кроме того, потратьте время на то, чтобы просмотреть исходники HTTPLIB. HTTPLIB, содержащий менее 200 строк кода, — быстрое и простое вступление к программированию сокетов с использованием Python.

URLLIB

URLLIB обеспечивает изощренный интерфейс к функциональности HTTPLIB. Лучше всего использовать его непосредственно для получения данных, а не для анализа Web-сайта. Здесь представлено то же взаимодействие, что и выше, но с использованием URLLIB:

>>> import urllib >>> u = urllib.urlopen("http://www.oreillynet.com/meerkat/?_fl=minimal")

Вот и все, что нужно сделать! Одной строкой вы обратились к Meerkat, получили данные и поместили их во временный кэш. Для доступа к заголовку:

>>> print u.headers

И для просмотра всего файла:

>>>print u.read()

Но это еще не все. В дополнение к HTTP, URLLIB может таким же образом обращаться к FTP, Gopher и даже к локальным файлам. Модуль содержит также множество вспомогательных функций, включая те, что используются для разбора url, кодирования строк в url-безопасный формат и обеспечения индикации хода процесса во время пересылки большого объема данных.

Пример использования Meerkat

Представьте, что у вас есть группа клиентов, ожидающих, что их будут информировать по почте о последних событиях, касающихся Linux. Мы можем написать короткий скрипт с использованием URLLIB для получения этой информации из Meerkat, построить список ссылок и сохранить эти ссылки в файл для последующей передачи. Автор Meerkat, Рэйел Дорнфест, уже сделал большую часть работы за нас в Meerkat API. Все, что нам осталось — это сконструировать запрос, разобрать ссылки и сохранить результаты для последующей передачи.

Зачем делать все это вместо того, чтобы просто отдать Meerkat на откуп пользователям? Обеспечение такого "пассивного" обслуживания дает пользователям возможность просматривать информацию на досуге и избирательно сохранять информацию в знакомом формате (например, в формате электронной почты). Получая новости в свой почтовый ящик утром в понедельник, они не пропустят информацию, прошедшую за выходные.

Поскольку минимальный вариант выборки Meerkat ограничен 15 новостями, мы будем запускать скрипт каждый час (например, как задание cron под Unix, или, используя команду AT под NT) для уменьшения вероятности потери данных. Вот url, который мы будем использовать (результаты использования этого URL вы можете посмотреть здесь).

Это объединит все новости о Linux (profile=5) за последний час, представляя данные в минимальном варианте, без описаний, информации о категории, канале и дате. Мы также используем модуль регулярных выражений, чтобы извлечь информацию о ссылках и перенаправить вывод в файловый объект, открытый в режиме добавления.

Вывод

Мы только коснулись поверхности этих модулей, а существуют еще множество других доступных для Python модулей сетевого программирования, которые могут быть использованы для задач, связанных с Web-клиентом. Программирование Web-клиента особенно полезно при обработке больших объемов табличных данных. Используя программирование Web-клиента в последнем проекте Обмена Электронными Данными (Electronic Data Interchange project), мы избежали использования громоздкого пакета патентованных программ. Мы извлекали необходимую нам обновленную информацию о ценах напрямую из Web и помещали ее в нашу базу данных. Это сэкономило нам массу времени и нервов.

Программирование Web-клиента может быть полезно и для тестирования структуры и целостности Web-сайтов. Наиболее распространенная процедура заключается в проверке неработающих ссылок. Стандартный дистрибутив Python включает в себя полный пример такой проверки, основанной на URLLIB. Webchecker вместе с основанным на Tk внешним интерфейсом можно найти в подкаталоге tools в дистрибутиве. Другой инструмент языка Python, Linbot, еще совершеннее. Он обеспечивает все, что вам нужно для решения проблем с Web-сайтом. По мере того, как сайты становятся все сложнее, другие Web-клиентские приложения становятся все необходимее для обеспечения качества вашего Web-сайта.

В программировании Web-клиента есть ловушка. Ваши программы часто чувствительны к небольшим изменениям в форматировании страниц. То, как сайт показывает свои данные сегодня, может отличаться от того, как он будет показывать их завтра. Когда изменяется формат, должны изменяться и ваши программы. Это одна из причин популярности XML: для данных в web, отмеченных тэгами, отражающими их значение, формат менее важен. По мере того, как стандарты XML будут развиваться и становиться общепринятыми, обработка XML-данных будет еще проще и надежнее.

От автора: после создания нескольких бэкендов на PHP уважающий себя программист начинает искать альтернативу этому языку. Кто-то выберет Java и будет прав. Но то, кто захочет прочувствовать, что такое на Python разработка веб приложений, уже никогда не захочет работать с чем-либо другим. Язык развивается стремительно, а его коммерческое применение оправдывает себя с каждым новым проектом. Сегодня мы расскажем, почему он так хорош для web-разработки, и какие препятствия подстерегают новичка.

Что такое Python, и зачем его изобрели

В отличии от PHP, который годится для web-разработки и некоторых экспериментов в других областях, Python считается универсальным языком. Он может быть одинаково хорош для мобильных приложений, «фронта» сайтов, создания программного обеспечения для борьбы с малваром и прочего. Вся суть программирования на Питоне в том, что на нем можно написать абсолютно все.

Python - сравнительно немолодой язык для web-разработки: задуман в 1980-ом, а реализован ближе к девяностым. Его автор, Гвидо ван Россум, хотел усовершенствовать язык ABC, который использовался для обучения, но имел ряд недостатков. В итоге, из хобби Россума получился высокоуровневый скриптовый PL, благодаря которому web-разработка поднялась на новый уровень.

Если сравнивать с PHP, который до сих пор является лидером в плане создания сайтов, то на Питоне весь процесс проходит значительно быстрее. К тому же, это язык, который поддерживает объектно-ориентированное программирование, что тоже является плюсом. Серьезные разработчики привыкли работать именно так.

У языка даже есть свой манифест, который принято называть философией. Ее написал Тим Петерс. Некоторые из лозунгов будем использовать. Например, с следующем заголовке.

Читаемость имеет значение

Это один из основных лозунгов Python, который напрямую влияет на его распространенность в web-разработке. Создатели сделали упор не на мощности самого кода, а на продуктивности разработчиков, которые с ним работают. Это один из пунктов, которые отличают язык от PHP. На «препроцессоре» лучше всего получается код, который может прочитать лишь его автор. Для работы в команде такой подход не пройдет. Даже самая сложная система расчета будет выглядеть понятнее, чем стандартные приложения на Java и С-подобных. Человек, далекий от программирования на Питоне, но понимающий принципы создания программы, сможет понять общую картину.

Для нового поколения сети

Как только кто-то начинает критиковать язык web-разработки, важно понять причину: скорее всего, он просто широко используется, и его недостатки известны всем. Но, несмотря на распространённость, о слабых сторонах Python вы услышите нечасто. Он хорошо вписался в современный Интернет и активно продолжает развитие в сторону web. Возможно, через несколько лет его будут ассоциировать исключительно с веб-программированием.

Итак, у языков Java, С, и PHP есть своя аудитория почитателей. У каждого из них есть свои сильные стороны, которые активно ставят в упрек тем, кто пишет на Питоне. Но правда в том, что крупные компании охотно верят в Python, создавая на основу для своих бизнес-процессов. И хотя у основного конкурента в этой сфере (Java) скорость выполнения кода выше, Пайтон берет свое благодаря простоте написанной программы. Ее легче редактировать и выявлять ошибки. Ну, а если говорить о web-разработке, то здесь время исчисляется минутами. Не сумел поднять сервер, и вот - юзеры перешли к конкуренту.

В Python верят такие акулы бизнеса, как Google. Первый их кроулер был полностью реализован на Питоне. Но здесь прагматизм сыграл свою роль: через некоторое время его пришлось заменить на тот, который создали с помощью С++. Поверьте, такая нагрузка, как на Google, не ждет ни один ваш проект - создавайте на Python и не почувствуете разницы. К примеру, сервис PayPal тоже создан на Питоне, и это не мешает ему демонстрировать миру свое быстродействие. И, конечно же, известные пользователю Instagram и Spotify тоже созданы на основе Python (десктоп-версии).

Но где и правда web-разработка с помощью Python хороша, так это в создании веб-приложений статистического характера. Для этого у Питона есть даже специальная библиотека - Dash. Ее можно загрузить с помощью обычной команды в консоли и начинать разработку своего аналитического гиганта. Почти все подобные сервисы, вроде расчета популяции людей или роста курса инфляции, созданы на Питоне при помощи библиотеки Dash. Приятно и то, что созданные графики и таблицы можно преображать в плане интерфейса, будто вы работаете с CSS.

Современные тенденции и подходы в веб-разработке

Узнайте алгоритм быстрого роста с нуля в сайтостроении

Для того чтобы разработанные «аналитики» выглядели хорошо, библиотека еще и оснащена элементами Graph. Как и понятно из названия, она призвана обеспечить всеми видами графиков, которые только может представить разработчик.

Преимущества на миллион

В целом, вы уже понимаете, насколько хорош Python для web-разработки. Его все используют, и он эффективен. Так давайте оформим все в список преимуществ, которые характеризуют работу с этим языком программирования:

широкое распространение. Это всегда плюс, и мы уже о нем говорили. Все вокруг используют Python, даже Дисней. Следствием этого факта является то, что многое о нем уже известно. Как только вы сталкиваетесь с проблемой при программировании на Питоне, тотчас же можете обратиться за помощью в поисковик: скорее всего, вашу проблему уже кто-то решал. К тому же, для реализации практически любого проекта уже существуют заготовки, которые можно применить для себя;

разнообразие реализаций. Самая известная и каноническая - это CPython, реализация на С. Это значит, что код, написанный на нем, полностью взаимодействует с С, и библиотеки этого языка тоже можно применять для реализации. То же самое касается и языка Java. Существует и реализация на нем - Jython. Таких примеров масса, вплоть до взаимодействия Питона с Android и iOS;

простота языка. Нет, никто не говорит, что Python - это просто. Но если сравнить языки с такими же возможностями, то он явно впереди всех. Это значит, что его можно использовать не только в web-разработке, но и в любой другой области, где специалисты не имеют глубоких познаний в программировании. Например, если вы изучаете астрономию и хотите проводить сложные вычисления, то Java вам точно не подойдет. Синтаксис в Python похож на обыкновенные математические операции и не несет в себе дополнительной сложности;

скорость. Не удивляйтесь, когда немного ниже вы увидите этот пункт в списке недостатков. На самом деле, здесь все относительно. Несмотря на то, что программирование на Питоне может создавать более медленный код, чем Java или С, он все же значительно более быстр, чем JavaScript, PHP или Ruby. К тому же, за последние несколько лет проект PyPy сумел значительно «ускорить» Питон.

Но из всего этого списка, ключевым аспектом, конечно же, является простота. Благодаря низкому входному порогу к программированию присоединяется больше людей. К примеру, существуют даже детские реализации Python, которые стимулируют детей к программированию. А если ваш ребенок в средней школе начинает решать школьные задачи на Питоне, тогда к ее окончанию он точно будет знать, чем хочет заниматься в жизни.

Все преодолимо!

Именно с этим лозунгом хочется начать рассказ о недостатках Python. Язык настолько быстро развивается, что уже через несколько лет наши слова будут неактуальными. Активно проводится работа над проблемами, которые сегодня преследуют web-разработку на Python.

Как и обещали, первой и единственной из них будет скорость. Именно на ней завязаны все последующие недостатки. Существует несколько подходов, объясняющих, почему этот язык работает медленнее, чем его статические собратья (С-семья и Java). Первый настаивает на том, что причиной всему Gil - Global Interpreter Lock. И это правда: замок блокирует потоки для того, чтобы не разрушить данные, которые в них перемещаются. Как только опасность минует, он их освобождает. Эта технология призвана обеспечить стабильность, но, как результат, замедляет работу. Хорошая новость в том, что программисты придумали массу решений этой проблемы, а в новой версии языка сам процесс значительно оптимизирован.

Вторая причина может быть в динамической типизации. Когда-то это был инструмент, который облегчает задачу начинающим разработчикам. Но в больших проектах следить за динамическими данными будет сложно. Потому web-разработка таких приложений с помощью Python требует опыта. Такие компании, как Dropbox, решают эту проблему благодаря специфическим реализациям - проект Pyston.

На этом у нас все! Учите Python! Используйте Python!

Современные тенденции и подходы в веб-разработке

Узнайте алгоритм быстрого роста с нуля в сайтостроении