Python для начинающих
1.06K subscribers
303 photos
3 videos
232 files
62 links
Python для начинающих
Download Telegram
Она объединяет мощь Python, геометрии и визуализации, значительно упрощая работу с картами и геоданными.

Попробуйте сами! В одном GeoDataFrame вы можете объединить координаты, атрибуты объектов, произвести пространственные вычисления и вывести свою уникальную карту. Python становится проводником в мир необычных задач, и GeoPandas — отличный инструмент на этом пути. ‍🚀
🔥4
Настройка Jenkins для непрерывной интеграции с Python.
Настройка Jenkins для непрерывной интеграции с Python

Без автоматизации современная разработка — что корабль без капитана в шторм. Ты можешь быть талантливым разработчиком, но без автоматизированных процессов легко утонуть в ручных задачах. Сегодня я расскажу, как настроить Jenkins для непрерывной интеграции (CI) в ваших Python-проектах. Мы пройдем через весь процесс шаг за шагом, чтобы ваш код автоматически тестировался и деплоился, пока вы спите или пьёте кофе.

---

### Зачем нужен Jenkins?
Jenkins — это open-source сервер для автоматизации. Представьте, что после каждого вашего коммита система автоматически проверяет, нет ли ошибок в коде, запускает тесты и, возможно, даже разворачивает приложение на сервере. Это экономит кучу времени и предотвращает «забытые тесты» или сломанные сборки.

---

### Шаг 1: Установка Jenkins
Для начала нужно установить Jenkins. На официальном сайте есть подробные инструкции для всех популярных операционных систем, поэтому этот этап мы пропустим. Убедитесь, что Jenkins запущен и доступен по адресу http://localhost:8080 (или другому, если вы изменили порт).

---

### Шаг 2: Установка плагинов
После установки переходим в интерфейс Jenkins. Заходим в "Управление Jenkins" → "Управление плагинами". Здесь вам потребуется установить следующие плагины:

- Git Plugin — для работы с репозиторием.
- Pipeline Plugin — для настройки процессов CI/CD.
- (по необходимости) Python Plugin — для управления Python-средой.

После установки перезапускаем Jenkins.

---

### Шаг 3: Настройка проекта
Теперь создадим первый проект. Нажимаем «Создать новую задачу», выбираем Pipeline и задаем имя. После этого мы попадем в меню настройки проекта.

---

### Шаг 4: Настройка Jenkins Pipeline для Python
Pipeline — это набор инструкций, описанных в файле Jenkinsfile. Он управляет процессами CI/CD. Вот пример Jenkinsfile, который подойдет для типичного Python-проекта:

pipeline {
agent any
stages {
stage('Clone Repository') {
steps {
git 'https://github.com/your-repo/example-python-project.git'
}
}
stage('Set Up Environment') {
steps {
sh 'python3 -m venv venv'
sh './venv/bin/pip install -r requirements.txt'
}
}
stage('Run Tests') {
steps {
sh './venv/bin/pytest tests/'
}
}
}
}


#### Что здесь происходит?
1. Clone Repository — Jenkins клонирует ваш репозиторий (замените your-repo на ваш URL).
2. Set Up Environment — создается виртуальная среда Python и устанавливаются зависимости из файла requirements.txt.
3. Run Tests — запускаются тесты, чтобы убедиться, что всё работает.

Скопируйте этот файл в корень репозитория как Jenkinsfile.

---

### Шаг 5: Подключение репозитория
В настройках вашего Pipeline-проекта в Jenkins укажите путь к репозиторию. Если он находится на GitHub, используйте токен безопасности для чтения репозитория.

---

### Шаг 6: Запуск и проверка
Сохраните изменения и запустите задачу вручную через интерфейс Jenkins. Если всё настроено правильно, вы увидите, как каждое действие выполняется пошагово. На этапе Run Tests Jenkins выведет результаты тестов и сообщит, если что-то пошло не так.

---

### Шаг 7: Настройка автоматического запуска
Чтобы Jenkins сам запускал задачу при каждом новом коммите, настройте webhook в репозитории. Для GitHub это делается в разделе Settings → Webhooks. Укажите URL Jenkins: http://your-jenkins-url/github-webhook/.

---

### Бонус: Docker для изоляции
Если ваш проект требует сложных зависимостей, то можно настроить Jenkins для работы с Docker-контейнерами.
👍1
Например:

pipeline {
agent {
docker {
image 'python:3.10'
}
}
stages {
stage('Run Tests') {
steps {
sh 'pip install -r requirements.txt'
sh 'pytest tests/'
}
}
}
}


Контейнер с заданным образом Python будет автоматически развернут Jenkins, а после завершения работы удален.

---

### Итог
Теперь у вас есть базовая настройка Jenkins для Python-проекта. Этот процесс можно усложнить: добавить деплой на сервер, статический анализ кода или другие этапы. Но даже на этом этапе вы уже на шаг ближе к автоматизации всего процесса разработки!

Удачи в работе с Jenkins! 🚀
👍2
Как использовать OpenAI GPT для создания интеллектуальных приложений.
Как использовать OpenAI GPT для создания интеллектуальных приложений

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

### Начнем с подключения к API OpenAI

Первым делом необходимо зарегистрироваться на платформе OpenAI и получить API-ключ. Этот ключ понадобится для взаимодействия с моделью GPT. Ниже пример минимального кода для работы с их API:

import openai

# Укажите ваш API-ключ
openai.api_key = 'your-api-key-here'

# Пример запроса к модели GPT
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Что такое Python?"}
]
)

print(response['choices'][0]['message']['content'])


Этот код отправляет запрос к модели ChatGPT и возвращает ответ. А теперь разберемся, какие интересные функции можно на этом построить.

---

### Идея 1: Chatbot — помощник для ваших нужд

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

Пример: бот для упрощенного объяснения сложных концепций.

def explain_concept(query):
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "Объясняй сложные концепции понятным языком."},
{"role": "user", "content": query}
]
)
return response['choices'][0]['message']['content']

# Использование
print(explain_concept("Что такое рекурсия?"))


---

### Идея 2: Генерация текстов и идей

GPT может быть вашим личным копирайтером. Например, если вам нужно сгенерировать описание продукта или написать маркетинговый текст, вы можете написать простой скрипт:

def generate_description(product_name, audience):
prompt = f"Напиши описание для продукта '{product_name}', ориентированное на аудиторию: {audience}."
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}]
)
return response['choices'][0]['message']['content']

# Пример использования
print(generate_description("умные часы", "люди старшего возраста"))


---

### Идея 3: Улучшение пользовательского опыта

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

def reply_to_feedback(feedback):
prompt = f"На отзыв клиента сформулируй вежливый и информативный ответ: {feedback}"
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}]
)
return response['choices'][0]['message']['content']

# Пример использования
print(reply_to_feedback("Ваш сервис слишком медленный. Можно что-то сделать?"))


---

### Важные заметки при работе с OpenAI GPT

1. Ограничения модели. GPT хорош в понимании текста, но он не знает всего и может иногда придумывать факты. Если вы строите на его базе продукт, убедитесь в наличии дополнительной проверки данных.
2. Стоимость запросов. Использование API не бесплатное, поэтому оптимизируйте запросы. Например, передавайте только необходимую информацию.
3. Контроль тона и стиля. Модель чувствительна к инструкциям, которые вы задаете.
Тщательно продумывайте роль ассистента (например, "Будь забавным", "Рассказывай нейтрально").

---

### Перспективы использования

OpenAI GPT отлично подходит для самых разных приложений: виртуальные ассистенты, автогенерация контента, анализ данных, персонализация пользовательского опыта. И главное — с его помощью можно создавать уникальные продукты, используя лишь простые библиотеки Python.

Попробуйте интегрировать GPT в свои идеи, и вы, возможно, будете удивлены, как быстро это вытянет ваш проект на новый уровень!
Разработка приложений реального времени на Python с использованием WebSocket.
---
# Разработка приложений реального времени на Python с использованием WebSocket

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

Сегодня я расскажу, как настроить и использовать WebSocket в Python, объясняя все на живых примерах. Также познакомлю вас с замечательной библиотекой — websockets, которая делает работу с этим протоколом не только легкой, но и по-настоящему приятной.

---

### Что такое WebSocket и зачем он нужен?

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

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

---

### Основы работы с WebSocket на Python

Для начала, давайте настроим простой сервер на websockets. Эта библиотека позволяет создавать легковесные серверы, идеально подходящие для приложений реального времени.

1. Установка библиотеки
Для начала установим модуль:
  
pip install websockets


2. Пример сервера WebSocket
Вот простой сервер, который отвечает клиенту "Hello, Client!" на каждое принимаемое сообщение:

  
import asyncio
import websockets

async def echo_server(websocket, path):
async for message in websocket:
print(f"Received: {message}")
await websocket.send("Hello, Client!")

start_server = websockets.serve(echo_server, "localhost", 12345)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()


Этот код делает следующее:
- Создает сервер по адресу localhost:12345.
- Обрабатывает входящие сообщения, отправляя ответ обратно клиенту.
- Сервер всегда находится в состоянии ожидания новых подключений.

3. Пример клиента WebSocket
Теперь напишем клиент, который соединяется с сервером и отправляет сообщение:

  
import asyncio
import websockets

async def echo_client():
uri = "ws://localhost:12345"
async with websockets.connect(uri) as websocket:
await websocket.send("Hello, Server!")
response = await websocket.recv()
print(f"Server says: {response}")

asyncio.run(echo_client())


Этот код подключается к серверу, отправляет сообщение и выводит его ответ.

---

### Расширяем функциональность

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

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

  
connected_clients = set()

async def chat_server(websocket, path):
connected_clients.add(websocket)
try:
async for message in websocket:
for client in connected_clients:
if client != websocket:
await client.send(message)
finally:
connected_clients.remove(websocket)


Этот сервер:
- Хранит активные подключения в connected_clients.
- Отправляет сообщение всем клиентам, кроме отправителя.

2.
👍2
Клиент для чата
Клиенты будут отправлять сообщения на сервер и отображать сообщения других пользователей:

  
async def chat_client():
uri = "ws://localhost:12345"
async with websockets.connect(uri) as websocket:
while True:
user_input = input("You: ")
await websocket.send(user_input)
response = await websocket.recv()
print(f"Friend: {response}")

asyncio.run(chat_client())


Теперь у нас есть полноценное приложение для общения в реальном времени!

---

### Преимущества и ограничения

Почему стоит использовать WebSocket?
- Постоянное соединение.
- Двусторонняя передача данных.
- Низкая задержка.

Однако, несмотря на преимущества, стоит помнить о некоторых ограничениях:
- WebSocket может быть избыточным для приложений, где нет строгих требований к мгновенной передаче данных.
- Управление соединениями требует ресурсов сервера.

---

WebSocket — это невероятный инструмент для создания интерактивных приложений. С помощью Python и библиотеки websockets вы можете буквально за несколько строк кода создавать мощные приложения реального времени. Хотите онлайн-игры, уведомления или системы мониторинга? Все это всего в нескольких строчках кода. Главное — начать экспериментировать!
👍3
Создание приложений виртуальной реальности с использованием Python и Unity.
### Создание приложений виртуальной реальности с использованием Python и Unity

Привет, друзья! Виртуальная реальность (VR) уже давно перестала быть чем-то далеким и фантастическим — сегодня создание своих VR-приложений доступно каждому, кто готов немного углубиться в программирование. Сегодня я расскажу, как Python, любимый многими, удивительно гармонично сочетается с Unity, одним из самых популярных инструментов для разработки игр и VR, несмотря на то, что Unity изначально работает с C#. Готовы? Тогда погружаемся в этот технологический мир!

#### Python и Unity: как они работают вместе?

Unity базируется на своем встроенном языке — C#. Python вроде не из их компании, но благодаря специальным библиотекам и подходам они могут подружиться. Одним из самых частых способов интеграции Python и Unity является использование пакета Pythonnet, который позволяет запускать код Python внутри приложений на .NET.

Еще один популярный инструмент — Unity-Python Integration (например, с использованием IronPython или внешних скриптов Python для дополнительной логики). Это помогает Python выступать в роли "мозга" для вашего VR-приложения: он может обрабатывать данные, управлять взаимодействиями и даже использовать мощные библиотеки вроде NumPy для расчётов или OpenCV для обработки изображений.

#### Что может Python в VR?

Python замечательно справляется с такими задачами, как:
- Прототипирование приложений. Хотите быстро обработать данные пользовательского взаимодействия в своей VR-среде? Python спасет.
- Анализ данных: извлечь данные отслеживания движения, распознавание жестов или сбор статистики о взаимодействиях пользователя.
- Генерация контента: например, использовать алгоритмическую генерацию ландшафтов на основе математических моделей в Python.
- Построение систем искусственного интеллекта (AI): подключите машинное обучение с помощью TensorFlow или PyTorch.

#### Как все это воплотить?

Рассмотрим пример интеграции Python и Unity на практике. Пусть мы хотим создать простой VR-прототип, где Python обрабатывает ввод данных, а Unity отображает их в трехмерной среде.

##### 1. Установка Pythonnet
Сначала поставим Pythonnet:
pip install pythonnet


##### 2. Настройка проекта Unity
В Unity создайте проект с 3D-шаблоном и добавьте базовые объекты: например, VR-камеру и пару UI-объектов для отображения данных.

##### 3. Интеграция Python кода
Здесь небольшой скрипт на Python для обработки событий:
import random

def generate_random_coordinates():
x = random.uniform(-5, 5)
y = random.uniform(-5, 5)
z = random.uniform(-5, 5)
return x, y, z


##### 4. Использование Python-классов в Unity
Далее потребуется написать скрипт C# в Unity для работы с Python-кодом через Pythonnet:
using Python.Runtime;
using UnityEngine;

public class PythonIntegration : MonoBehaviour
{
void Start()
{
using (Py.GIL())
{
dynamic pyScript = Py.Import("your_python_script_name");
var coords = pyScript.generate_random_coordinates();
Debug.Log($"Coordinates generated by Python: {coords}");
}
}
}

Не забудьте сохранить свой Python-скрипт рядом с исполняемым файлом Unity (`your_python_script_name.py`).

##### 5. Запуск в VR
После интеграции вышеописанного кода, добавьте генерацию объектов в Unity на основе координат и запустите всё в VR-среде. Например, можно привязать появление объектов к результатам из функции generate_random_coordinates.

#### Пару советов напоследок

1. Если ваш проект сложный или использует Python для интенсивных расчетов, рассмотрите создание отдельного Python-сервера, который будет взаимодействовать с Unity через API (например, через WebSocket или REST).
2. Unity уже включает в себя плагины для VR, такие как Oculus Integration или SteamVR Plugin, так что смело добавляйте их в проект.

#### Заключение

Python и Unity вместе открывают огромные возможности для творчества.
Используя Python для обработки данных, логики и автоматизации, можно сэкономить время и сосредоточиться на создании увлекательных опытов для пользователей VR. Конечно, потребуется немного усилий для интеграции языков, но результат стоит того. Экспериментируйте, пробуйте новое и заходите в мир VR с Python!
Основы создания чат-ботов на платформах Viber и Messenger.
Основы создания чат-ботов на платформах Viber и Messenger

Сегодня мир все больше переходит в формат общения через мессенджеры, и это открывает огромные возможности для разработчиков. Чат-боты стала неотъемлемой частью клиентского взаимодействия: они консультируют, принимают заказы, развлекают и экономят ресурсы компаний. В этом посте мы разберем ключевые этапы создания чат-ботов для двух популярных платформ — Viber и Messenger — с использованием языка Python. Вас ждут простые примеры и полезные инструменты, которые помогут начать буквально через несколько минут.

### Как это работает?

Чат-бот ведет общение с пользователем через платформу мессенджера. Вы предоставляете ему некий интеллект (например, через заранее заданные сценарии или даже через интеграцию с AI), подключаете его к API мессенджера, и — вуаля! — он готов отвечать на запросы пользователей.

Платформы Messenger и Viber предоставляют официальные API (и SDK), которые позволяют создавать таких ботов. Для работы с ними нужно зарегистрировать своего бота на платформе, получить ключи API и настроить взаимодействие через вебхуки.

---

### Шаг 1. Устанавливаем инструменты

Первое, что вам понадобится для начала разработки, — это Python и несколько популярных библиотек:

1. Flask для создания веб-сервера (хендлеров запросов от платформ).
2. requests для взаимодействия с API.
3. pyngrok для быстрого туннелирования запросов с платформы к вашему локальному серверу.

Установите их с помощью pip:
pip install flask requests pyngrok


Чтобы взаимодействовать с мессенджерами, вам также нужно зарегистрироваться на их платформах (Viber Developers или Facebook Developers), создать приложение и получить токен вашего бота.

---

### Шаг 2. Настройка вебхуков

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

Пример настройки вебхука для Viber:
import requests

viber_token = "YOUR_VIBER_TOKEN"
webhook_url = "https://your-ngrok-url/viber-webhook"

response = requests.post(
"https://chatapi.viber.com/pa/set_webhook",
json={"url": webhook_url},
headers={"X-Viber-Auth-Token": viber_token}
)
print(response.json())


---

### Шаг 3. Создаем бота

Теперь перейдем к коду.
Допустим, мы пишем простого бота, который отвечает на входящие текстовые сообщения "Hello" приветствием.

#### Пример для Viber:
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/viber-webhook', methods=['POST'])
def viber_webhook():
data = request.json
message = data.get("message", {}).get("text", "").lower()

if message == "hello":
reply = {
"receiver": data["sender"]["id"],
"min_api_version": 1,
"sender": {"name": "YourBot"},
"tracking_data": "tracking_data",
"type": "text",
"text": "Hello, human!"
}
return jsonify(reply)
return 'ok', 200

if __name__ == '__main__':
app.run()


#### Пример для Messenger:
Для Messenger конфигурация чуть сложнее: вам нужно обработать сообщения через Messenger Graph API.

@app.route('/messenger-webhook', methods=['POST'])
def messenger_webhook():
data = request.json
for entry in data["entry"]:
for event in entry["messaging"]:
if "message" in event:
sender_id = event["sender"]["id"]
message_text = event["message"]["text"]

if message_text.lower() == "hello":
send_message(sender_id, "Hello, human!")
return 'ok', 200

def send_message(sender_id, text):
url = f"https://graph.facebook.com/v15.0/me/messages?access_token=YOUR_PAGE_TOKEN"
headers = {"Content-Type": "application/json"}
payload = {
"recipient": {"id": sender_id},
"message": {"text": text}
}
requests.post(url, json=payload, headers=headers)


---

### Шаг 4. Тестирование

Чтобы быстро протестировать вашего бота, можно использовать Ngrok — он позволяет запустить локальный сервер и предоставить ему публичный HTTPS-URL.

Установите Ngrok и запустите его:
ngrok http 5000


В ответ вы получите ссылку вида https://12345.ngrok.io. Используйте ее, чтобы настроить вебхуки на платформе мессенджера.

---

### Шаг 5. Расширение функционала

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

Например, на платформе Viber для создания кнопок достаточно модифицировать JSON-объект ответа:
reply = {
"receiver": data["sender"]["id"],
"type": "rich_media",
"rich_media": {
"ButtonsGroupColumns": 6,
"ButtonsGroupRows": 1,
"Buttons": [
{
"ActionType": "reply",
"ActionBody": "Yes",
"Columns": 3,
"Rows": 1,
"Text": "Yes"
},
{
"ActionType": "reply",
"ActionBody": "No",
"Columns": 3,
"Rows": 1,
"Text": "No"
},
]
}
}


---

На основе этих примеров вы можете создавать своих помощников, автоматизировать рутинные процессы и строить масштабные системы. Всё, что вам нужно, — это идея, настройка окружения и немного кода. Удачной разработки!
Как упаковать Python приложение в Docker-контейнер.
Как упаковать Python-приложение в Docker-контейнер

Привет, друзья! Сегодня мы с вами поговорим о том, как упаковать Python-приложение в Docker-контейнер. Что это даст? Конечную версию вашего приложения можно будет запускать на любом сервере (или компьютере) без необходимости устанавливать зависимости и настраивать окружение. Меньше проблем для вас, меньше головной боли для тех, кто будет это приложение деплоить. В общем, звучит прекрасно, правда?

Если вы новичок в Docker — не переживайте, все будет понятно. А самое главное — никакой магии, только четкие шаги и практический пример.

---

### Что такое Docker?

Docker — это инструмент для создания изолированных контейнеров, которые работают как миниатюрные виртуальные машины. В каждом контейнере можно упаковать свое приложение со всеми необходимыми зависимостями. Вы собираете контейнер, отправляете его куда угодно, и он гарантированно будет работать одинаково.

Теперь разберемся, как это применить на практике для Python-приложения.

---

### 1. Открываем проект

Допустим, у вас есть простой скрипт на Python. Создайте новый проект (или используйте существующий). Пусть структура выглядит примерно так:

my_app/
├── app.py
├── requirements.txt


В файле app.py напишем что-то совсем простое, например:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
return "Hello, Docker!"


А в requirements.txt добавим все зависимости. В нашем случае это только Flask:

Flask==2.2.5


---

### 2. Создаем Dockerfile

Dockerfile — это файл-инструкция для Docker, который говорит, как создать ваш контейнер. В корне проекта создайте файл Dockerfile и добавьте в него следующее:

# Берем базовый образ с Python 3.10
FROM python:3.10-slim

# Указываем рабочую директорию в контейнере
WORKDIR /app

# Копируем файлы проекта в контейнер
COPY requirements.txt requirements.txt
COPY app.py app.py

# Устанавливаем зависимости
RUN pip install --no-cache-dir -r requirements.txt

# Указываем команду для запуска приложения
CMD ["python", "app.py"]


Разберем, что тут происходит:
1. FROM — берем базовый образ с Python (облегченную версию slim).
2. WORKDIR — указываем директорию внутри контейнера, где будет жить наш код.
3. COPY — копируем наши файлы (requirements.txt и app.py) в контейнер.
4. RUN — устанавливаем зависимости.
5. CMD — определяем команду, которая запустит приложение при старте контейнера.

---

### 3. Сборка Docker-образа

Теперь мы готовы собрать Docker-образ (по сути, "шаблон" для контейнера). Откройте терминал, перейдите в папку с проектом и выполните:

docker build -t my_app:latest .


Здесь:
- -t my_app:latest — задаем имя и тег для нашего образа.
- . — указывает на то, что Dockerfile находится в текущей директории.

---

### 4. Запуск Docker-контейнера

Собрали образ? Отлично! Теперь запустим контейнер из него:

docker run -p 5000:5000 my_app:latest


- -p 5000:5000 — связывает порт 5000 на вашей машине с портом 5000 внутри контейнера (а Flask по умолчанию слушает именно 5000-й порт).

Теперь откройте браузер и зайдите на http://localhost:5000. Видите "Hello, Docker!"? Здорово, контейнер работает как часы.

---

### 5. Что дальше?

Упаковав приложение в Docker-контейнер, вы получаете универсальный способ его запуска. Хотите развернуть это на сервере? Просто скопируйте образ, запустите там контейнер — и готово. Установка Python и настройка окружения больше не проблема.

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

---

Надеюсь, статья была полезной! До встречи в следующем посте, где мы разберем еще больше крутых возможностей Python и инструментов вокруг него! ;)
👍4
Использование библиотеки Pydantic для валидации данных в приложениях.
Pydantic для валидации данных: спасение для вашего кода

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

Если вы разрабатываете какие-либо приложения — от микросервисов до обычных скриптов — Pydantic станет вашим верным помощником в валидации и сериализации данных. Давайте разбираться, как это работает.

---

### Что такое Pydantic?

Pydantic — это библиотека для работы с данными на основе Python. Она позволяет описывать структуру данных с помощью аннотаций типов и автоматически проверяет их корректность при создании объектов. Но это далеко не все: с помощью Pydantic можно преобразовывать, валидировать и даже документировать данные с минимальными усилиями. И все это благодаря мощи Python type hints.

Вместо того чтобы писать километры условий для проверки входных данных, вам достаточно описать модель, а Pydantic позаботится о проверке их соответствия.

---

### Работа с Pydantic на практике

Давайте разберем простые примеры, чтобы вы могли оценить, насколько это полезный инструмент.

#### 1. Определение моделей

С помощью Pydantic можно описать данные, которые вы ожидаете. Например, информация о пользователе:

from pydantic import BaseModel
from datetime import date

class User(BaseModel):
username: str
email: str
birthdate: date
is_active: bool = True


Модель User содержит четыре поля с различными типами данных. Заметьте, что is_active имеет значение по умолчанию — валидация таких полей не требует дополнительных усилий.

#### 2. Проверка данных

Теперь попробуем создать объект User и посмотрим, как Pydantic работает с входными данными:

input_data = {
"username": "john_doe",
"email": "john@example.com",
"birthdate": "1990-05-15",
"is_active": "yes"
}

try:
user = User(**input_data)
print(user)
except Exception as e:
print(f"Validation error: {e}")


Что произойдет? Ну, предсказуемо — в поле is_active указана строка "yes", а не логическое значение. Pydantic тут же поднимет ошибку и объяснит, что ожидается значение типа bool.

#### 3. Конвертация данных

Но что, если данные верны, но указаны в "неудобном" формате? Pydantic умеет преобразовывать их автоматически:

input_data = {
"username": "jane_doe",
"email": "jane@example.com",
"birthdate": "1992-07-22",
"is_active": 1 # Да, это int, но Pydantic поймет!
}

user = User(**input_data)
print(user)


Результат? Поле is_active, несмотря на числовой вход, будет успешно приведено к типу bool. Это избавляет вас от лишней работы с привидениями (ну, в смысле, с преобразованием типов).

---

### Дополнительные возможности

Pydantic — это не просто инструмент для валидации. Вот еще несколько классных фич:

- Дефолтные значения: Установка стандартных значений для полей.
- Кастомная валидация: Если вам мало стандартных проверок, можно писать свои, используя декоратор @validator.
- Модели данных вложенного уровня: Pydantic поддерживает вложенность, что удобно для работы со сложными объектами.
- Работа с JSON: Легкая сериализация и десериализация данных.

Пример кастомной валидации:

from pydantic import BaseModel, validator

class Product(BaseModel):
name: str
price: float

@validator("price")
def validate_price(cls, value):
if value <= 0:
raise ValueError("Price must be greater than zero")
return value

product = Product(name="Laptop", price=999.99)
print(product)


Теперь, если кто-то попытается указать отрицательную или нулевую цену, он сразу же встретится с исключением.