Python создание сервера без фреймворков

Обновлено: 02.07.2024

Я только начинаю Python, и мне было интересно, как я буду программировать веб-приложения без необходимости фреймворка. Я разработчик PHP experiance, но у меня есть желание попробовать Python, и мне обычно нравится писать с нуля без ограничения фреймворка.

WSGI - это стандартный Python для интерфейсов веб-сервера. Если вы хотите создать свою собственную структуру или работать без структуры, вы должны изучить это. В частности, я нашел DIY рамки Яна Бика статья полезная.

в стороне, я склонен думать, что рамки полезны и лично используют Django, как и то, как работают пилоны, и использовали бутылки в прошлом для прототипирования-вы можете посмотреть на бутылку, если вы хочешь остаться-из-Ваш-путь microframework.

как есть, mod_wsgi будет обрабатывать только основы разбора запросов и кадрирования результатов.

Как только вы начнете этот путь, вы можете обнаружить, что небольшая поддержка фреймворка проходит долгий путь.

вам нужно будет посмотреть что-то вроде CGI или FastCGI-сервера, который предоставляет API для связи с веб-сервером.

Google App Engine позволяет писать простые приложения, и даже предоставляет локальный веб-сервер, где вы можете попробовать.

вы должны попробовать web.py, он обеспечивает минимальный набор функций, которые не мешают вам.

люди здесь любят рамок. Один из недостатков, который я отметил, заключается в том, что Python не имеет удобного модуля dandy для сессий как встроенной библиотеки, несмотря на то, что он доступен в PHP и как CGI::Session в Perl.

в конечном итоге вы будете делать:

вам придется писать сеансовые материалы самостоятельно.

для программиста PHP, я думаю модулем mod_python это хороший способ, чтобы начать работу без каких-либо рамок. Его можно использовать непосредственно как модуль Apache 2. У вас могут быть теги кода (например, <? ?> в PHP) и даже условный вывод HTML (HTML внутри оператора if):

ответ "нет". Использование фреймворка делает ваш код более доступным для обслуживания, масштабируемым, читаемым, тестируемым и модульным.

Favorite

Добавить в избранное (2 оценок, среднее: 3,00 из 5)

Python. Давайте создадим простой HTTP-сервер

Черт возьми, вы взаимодействуете с одним прямо сейчас!

Независимо от того, какой вы разработчик программного обеспечения, в какой-то момент вашей карьеры вам придется взаимодействовать с веб-серверами. Может быть, вы создаете сервер API для бэкэнда. Или, может быть, вы просто настраиваете веб-сервер для своего сайта.

Но поскольку мы хотим убедиться, что вы понимаете, что мы создаем, мы сначала дадим обзор о том, что такое веб-серверы и как они работают.

Если вы уже знаете, как работают веб-серверы, вы можете сразу перейти к этому разделу.

2- Обрабатывает этот запрос и отправляет ответ обратно пользователю.

Но что на самом деле происходит под капотом?

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

Но для простоты мы отвлечемся от некоторых деталей и расскажем об этом на очень высоком уровне.

Этот запрос будет распространяться на компьютер yandex, на котором работает веб-сервер. Этот веб-сервер перехватит ваш запрос и обработает его, отвечая HTML-кодом домашней страницы yandex.

Наконец, ваш браузер отображает этот HTML на экране, и это то, что вы видите на своем экране.

Каждое взаимодействие с домашней страницей yandex после этого (например, когда вы нажимаете на ссылку) инициирует новый запрос и ответ точно так же, как первый.

Хорошо, теперь, когда вы знаете, что такое веб-сервер и какова его функция, вам может быть интересно, как запрос в первую очередь достигает машины yandex?

Адрес сокета TCP

И каждый TCP-адрес состоит из IP-адреса и номера порта.

Мы знаем, что все эти аббревиатуры (TCP, IP и т. д.) могут быть ошеломляющими, если ваши сетевые знания не сильны.

Читать Является ли AliExpress Безопасным? 6 советов, Как избежать мошенничества

Ну, это доменное имя преобразуется в IP-адрес через большую распределенную базу данных, называемую DNS.

Хотите проверить, что это за IP-адрес?

Легко! Зайдите в свой терминал и сделайте следующее:

И если веб-сервер прослушивает номер порта не по умолчанию (ни 80, ни 443), вы должны явно указать номер порта следующим образом:

Так что без дальнейших церемоний, давайте начнем.

Создайте простой файл HTML

Вот что мы хотим сделать.

Давайте создадим нашу HTML-страницу.

Теперь сохраните этот файл как index.html.

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

Теперь давайте разберем этот код построчно.

И, как вы уже знаете, TCP-адрес идентифицируется по IP-адресу и номеру порта.

Во-вторых, веб-сервер также должен знать, как обрабатывать входящие запросы.

Конечно, эти обработчики могут делать все что угодно.

Но что вы думаете, какой самый основной обработчик?

Ну, это будет обработчик, который просто обслуживает статический файл.

Это на самом деле то, что мы пытаемся сделать.

Читать Почему Windows Server 2016 лучше, чем Windows Server 2019

Класс socketserver.TCPServer

Теперь поговорим о классе socketserver.TCPServer.

Чтобы создать экземпляр TCP-сервера, нам нужны две вещи:

  1. TCP-адрес (IP-адрес и номер порта)
  2. Обработчик

Как видите, TCP-адрес передается в виде кортежа (IP-адрес, номер порта)

Передача пустой строки в качестве IP-адреса означает, что сервер будет прослушивать любой сетевой интерфейс (все доступные IP-адреса).

А поскольку PORT хранит значение 8080, сервер будет прослушивать входящие запросы на этот порт.

Для обработчика мы передаем простой обработчик, о котором мы говорили ранее.

Ну, а как насчет serve_forever?

В этом каталоге запустите веб-сервер:

Пришло время для забавных вещей!

Откройте браузер и введите localhost:8080 в адресной строке.

Потрясающие! Похоже, все работает нормально.

Но что такое localhost ?

А поскольку веб-сервер прослушивает любой интерфейс, он также прослушивает интерфейс обратной связи.

Вы хотите знать, какой IP-адрес соответствует localhost?

Фактически вы можете полностью заменить localhost на 127.0.0.1 в вашем браузере, и вы все равно получите тот же результат.

Одно последнее слово

На самом деле вы можете запустить веб-сервер с python, даже не создавая никаких скриптов.

Просто зайдите в свой терминал и сделайте следующее (но убедитесь, что вы на Python 3)

По умолчанию этот сервер будет прослушивать все интерфейсы и порт 8080.

Если вы хотите прослушать определенный интерфейс, сделайте следующее:

Также начиная с Python 3.7, вы можете использовать флаг –directory для обслуживания файлов из каталога, который не обязательно является текущим каталогом.

Таким образом, теперь возникает вопрос: зачем вам когда-либо писать сценарий, когда вы можете просто вызывать сервер из терминала?

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.


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

Итак, в данной статье мы ответим на следующие вопросы:

  • Веб-разработка — что это?
  • Почему Python подходит для веб-разработки?
  • Веб-фреймворки Python
  • Библиотеки Python
  • Дорожная карта для веб-разработки с использованием Python
  • Как создать первое приложение в Python
  • Заключение

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


Преимущества разработки веб-приложений в Python:

  • Простое обучение: Python — самый популярный язык программирования для новичков. Он опирается на общие выражения и пробелы, что позволяет писать значительно меньше кода по сравнению с Java или C++. К тому же, он обладает более низким барьером входа, так как напоминает повседневный язык. Поэтому вы с легкостью сможете понять код. Однако это не значит, что изучение Python будет легким в начале. Программирование — сложный процесс, но он научит вас быстро схватывать идеи.
  • Обширная экосистема и библиотеки: Python предлагает большой спектр библиотечных инструментов и пакетов услуг. Таким образом, вы получите доступ к предварительно написанному коду с ускоренным временем на разработку приложений. Например, вы сможете воспользоваться Numpy и Pandas для математического анализа, Pygal для построения графиков и SLQALchemy для вложенных запросов. Python также обладает отличными веб-фреймворками — например, Django и Flask. Ниже мы расскажем о них более подробно.
  • Быстрое прототипирование: по сравнению с другими языками программирования Python тратит меньше времени, поэтому вы сможете реализовать свои идеи намного быстрее. Более того, вы получите обратную связь и легко выполните итерации. Благодаря небольшому времени на разработку Python особенно подходит для стартапов. Поэтому они могут выйти на рынок значительно быстрее и получить конкурентное преимущество.
  • Широкое распространение: Python — один из самых популярных языков программирования, поэтому он часто обновляется новыми функциями и библиотеками. Также Python обладает отличной документацией и поддержкой сообщества, что поможет начинающим разработчикам реализовать свои проекты.

Другие языки программирования для веб-разработки:

  • Javascript широко известен в веб-разработке благодаря своей пригодности для бэкенда и фронтенда. Такие фреймворки JS, как React.js и Vue.j, подходят для разработки фронтенда, в то время как Express.js чаще используется для бэкенда.
  • Java также достаточно популярный язык, который часто используют многие компании. Особой популярностью пользуется Java Spring, так как он обладает коллекцией библиотек и конфигураций. Благодаря такому набору возможностей вы сможете создавать серверные среды и развертывать приложения.
  • Ruby часто применяется для серверных технологий, но по сравнению с Javascript и Python считается более устарелым инструментом. Язык предполагает, что во время написания кода вам придется соблюдать определенную структуру.
  • PHP также является хорошо известным языком в веб-разработке, хотя за последние несколько лет его популярность снизилась. Он предлагает множество фреймворков и интеграций, но многие разработчики считают, что его дизайн недостаточно проработан, что может привести к написанию плохого кода.


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

Какие веб-фреймворки Python наиболее популярны?

Django — это быстрый, безопасный и масштабируемый веб-фреймворк Python, который предлагает высокий уровень и открытый исходный код. Django обладает мощной поддержкой сообщества и подробной документацией.

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

Django отличается гибкостью. Он позволяет работать как с минимально жизнеспособным продуктами, так и с более развитыми компаниями. Instagram, Dropbox, Pinterest и Spotify — все эти компании также используют Django.

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

Flask отличается простотой в использовании. Поэтому вы можете добавить расширения и библиотеки, которые вам нужны при написании кода.

Другие известные фреймворки

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

Кроме того, спросите себя, хотите ли вы создать «основополагающую» кодовую базу или же сформировать её основы? Если вы предпочитаете первый вариант, то стоит использовать Django, а если второй, то Flask. Но стоит отметить, что оба инструмента обладают одинаковой функциональностью.

Ниже представлено несколько полезных библиотек Python для веб-разработки:

Шаг 1:HTML + CSS

Вы можете также изучить такие CSS-фреймворки, как Materialize или Bootstrap. Они значительно ускорят вашу работу.

Шаг 2: Javascript

Следующий шаг, который необходимо сделать — это изучить Vanilla Javascript. Вам стоит ознакомиться с такими базовыми концепциями, как типы данных, переменные, общие соглашения, работа со строками, арифметика, управляющие операторы, циклы и т.д. Знание этих основ упростит применение Javascript к коду на стороне клиента.

Шаг 3: DOM & jQuery

Затем вам стоит научиться управлять еще одной библиотекой Javascript — jQuery. С ее помощью процесс манипулирования DOM станет гораздо проще. Теперь у вас есть представление о том, как создать динамические страницы.

Фронтенд-фреймворк

Для создания функционального веб-приложения с полным стеком рекомендуется изучать фронтенд-фреймворк. Такой навык часто является обязательным требованием при найме front-end или full-stack разработчика.

Шаг 4: Python

Теперь перейдем к бэкенду. Прежде чем приступить к манипуляциям с DOM, необходимо знать основы Python и Javascript. Эти базовые знания подготовят вас к Django. Изучение Python не вызывает трудностей, так как многие концепции напоминают Javascript.

Шаг 5: База данных Django +

С помощью Django вы сможете настроить бэкенд-среду и сформировать бизнес-логику. Вам также стоит узнать о том, как создать запросы, изучить базу данных SQLite и CRUD- функцию. В таком случае, вы сможете разработать приложение с полным стеком.

Запустите приложение Flask «hello world» в качестве введения в веб-фреймворки Python

Установка Flask

Первое, что необходимо сделать — это установить Flask. В зависимости от вашей версии Python, вам придется использовать pip или pip3.

pip install flask

Приложение Flask

Затем, создайте файл под названием hello.py со следующим кодом:

  • Строка 1 импортирует Flask
  • Строка 2 создает экземпляр Flask с переменной app , используя атрибутом __name__
  • Строка 4 задает направление / для страницы индекса или страницы по умолчанию. Когда пользователь переходит на locahost:5000/ , вы сможете настроить определенный код для запуска
  • Строка 5 создает функцию hello
  • Строка 6 возвращает пользователю строку Hello World!
  • Строка 8 тестирует пригодность сценария
  • Строка 9 запускает приложение из переменной app , чтобы пользователь смог посетить веб-приложение через localhost

Теперь вы имеете представление о том, как использовать Python для веб-разработки. Однако обучение на этом не заканчивается. Поэтому продолжайте искать надежные ресурсы, онлайн-курсы и практические проекты, чтобы улучшить свои навыки.

Пишем оператор Kubernetes на Python без фреймворков и SDK

На сегодня Go – фактический монополист в реализации Kubernetes-операторов. Вот почему так сложилось:

    – это мощный фреймворк, который создан специально для реализации операторов на Go. и Kubernetes реализованы на Go, и это меняет правила игры. Оператор, реализованный на Go, позволяет взаимодействовать со всей экосистемой.
  1. В языке Go есть простой механизм использования параллельности, поэтому приложения получаются высокопроизводительными.

Наверняка вам не захочется учить Go, если вы уже знаете Python. Поэтому мы сделаем надёжный оператор, используя язык программирования Python.

Мы напишем простой оператор, спроектированный, чтобы копировать ConfigMap, когда появляется новое пространство имён или при изменении состояния объектов ConfigMap, Secret. Нашим оператором удобно производить массовые обновления настроек приложения, а также сбрасывать им секреты, например, ключи репозитория образов Docker (когда Secret добавлен в пространство имён).

Так какие функции должен выполнять хороший оператор Kubernetes? Вот они:

  1. Взаимодействие с оператором производится с помощью Custom Resource Definitions (далее CRD).
  2. Оператор поддерживает настройку. Мы можем использовать флаги в командной строке и переменные окружения для настройки.
  3. Образ Docker и чарты Helm создаются с учётом облегчения установки для пользователей (обычно одной командой) в их кластер Kubernetes.

Чтобы оператор знал, где и какие ресурсы искать, нужно настроить некоторые правила. Каждое правило будет представлено как особый CRD-объект. Какие поля должен иметь CRD-объект?

  1. Тип ресурсов, которые нам интересны (ConfigMap или Secret).
  2. Список пространств имён, хранящих ресурсы.
  3. Селектор, который помогает нам искать ресурсы в конкретном пространстве.

Давайте определим наш CRD:

И немедленно добавим простое правило для выбора ConfigMaps с метками, совпадающими с copyrator: "true" в пространстве имён по умолчанию:

Отлично! Теперь нам нужно как-то получить информацию о наших правилах. Пришло время признаться: мы не будем делать запросы API нашего кластера вручную. Для этих целей есть Python библиотека – kubernetes-client:

Выполнив код выше, получим следующий результат:

Здорово! Теперь у нас есть особое правило для оператора. Важно, что мы смогли сделать это принятым для Kubernetes способом.

Пришло время приступить к базовой настройке оператора. Есть два главных подхода к настройке приложений:

  • с помощью параметров командной строки;
  • с помощью переменных окружения.

С помощью параметров командной строки вы сможете извлекать настройки с большей гибкостью и с поддержкой проверки типов данных. Используем модуль argparser из стандартной библиотеки Python. Детали и примеры использования доступны в официальной документации Python.

Вот пример настройки поиска флагов командной строки, адаптированных для нашего случая:

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

Давайте используем специальные карты для разделения методов работы с ConfigMap и Secret. Они позволят нам определиться с методом, необходимым для отслеживания и создания объектов:

Затем вы должны получать события от сервера API. Мы реализуем эту функциональность следующим образом:

После получения события мы приступаем к основной логике обработки:

Базовая логика завершена! Теперь нужно упаковать её в единый пакет Python. Создаём setup.py и добавляем туда метаданные о проекте:

Сейчас наш проект имеет следующую структуру:

Результирующий Dockerfile до смешного прост: мы берём базовый образ python-alpine и устанавливаем наш пакет (давайте отложим его оптимизацию на лучшее время):

Развернуть Copyrator тоже очень легко:

Наконец, создаём соответствующую роль для оператора с необходимыми разрешениями:

В этой статье мы показали, как создать ваш собственный оператор Kubernetes на Python. Конечно, он ещё сыроват: вы можете обогатить его возможностями обработки нескольких правил, самостоятельным мониторингом изменений в своих CRD, извлечь выгоду из возможностей параллелизма.

Читайте также: