⚽️ Soccer Hub — это веб-приложение, разработанное на фреймворке FastAPI, которое предоставляет API для управления информацией о футбольных командах, матчах и аналитикой.
Проект ориентирован на поддержку адаптивного дизайна, что позволяет пользователям удобно получать доступ к данным с различных устройств.
Приложение также включает в себя систему аналитики для отслеживания посещаемости и действий пользователей.
Структура проекта
Используемые технологии
1️⃣ FastAPI: Фреймворк для создания высокопроизводительных API.
2️⃣ Pydantic: Для валидации и сериализации данных.
3️⃣ SQLAlchemy: ORM для работы с базой данных.
4️⃣ Alembic: Миграции базы данных.
5️⃣ Docker: Для контейнеризации приложения (опционально).
4️⃣ Репозиторий на GitHub
⌨️ Теги: #сайт #аналитика #fastapi #web #api #pydantic #sqlalchemy #alembic #docker #фреймворк #analytics #maximdupley #quadd4rv1n7 #2024
Проект ориентирован на поддержку адаптивного дизайна, что позволяет пользователям удобно получать доступ к данным с различных устройств.
Приложение также включает в себя систему аналитики для отслеживания посещаемости и действий пользователей.
Структура проекта
soccer_hub/
├── app/
│ ├── __init__.py # Инициализация FastAPI приложения
│ ├── main.py # Запуск приложения
│ ├── core/
│ │ ├── config.py # Конфигурации приложения
│ │ └── security.py # Функции безопасности
│ │
│ ├── db/
│ │ ├── database.py # Подключение к базе данных
│ │ ├── models.py # Модели данных
│ │ └── schemas.py # Схемы Pydantic для валидации
│ │
│ ├── routes/ # API маршруты
│ │ ├── __init__.py # Инициализация маршрутов
│ │ ├── analytics.py # Маршруты аналитики
│ │ ├── players.py # Маршруты игроков
│ │ ├── teams.py # Маршруты команд
│ │ └── matches.py # Маршруты матчей
│ │
│ ├── services/ # Логика бизнес-процессов
│ │ ├── team_service.py # Сервис для работы с командами
│ │ └── match_service.py # Сервис для работы с матчами
│ │
│ ├── templates/ # HTML шаблоны
│ │ ├── base.html # Основной шаблон
│ │ ├── index.html # Главная страница
│ │ ├── analytics.html # Страница аналитики
│ │ ├── matches.html # Страница матчей
│ │ ├── players.html # Страница игроков
│ │ ├── team.html # Подробнее о команде
│ │ └── teams.html # Страница команд
│ │
│ ├── static/ # Статические файлы (CSS, JS, изображения)
│ │ ├── css/ # Файлы стилей
│ │ ├── js/ # Файлы скриптов
│ │ └── images/ # Фотографии
│ │
│ └── analytics/ # Аналитика посещаемости и действий
│
├── tests/ # Тесты для приложения
│ ├── test_routes.py # Тесты для маршрутов
│ └── test_services.py # Тесты для сервисов
│
├── add_data.py # Добавление данных в БД
├── create_db.py # Создание базы данных
│
├── .env # Переменные окружения
├── .gitignore # Файлы и папки, которые нужно игнорировать в Git
├── alembic/ # Миграции базы данных (если используем Alembic)
│ └── env.py # Конфигурация миграций
│
├── docker-compose.yml # Docker для контейнеризации (опционально)
├── README.md # Описание репозитория проекта
├── requirements.txt # Зависимости проекта
└── run.py # Точка входа для запуска проекта
Используемые технологии
⌨️ Теги: #сайт #аналитика #fastapi #web #api #pydantic #sqlalchemy #alembic #docker #фреймворк #analytics #maximdupley #quadd4rv1n7 #2024
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Pet-проекты и данные для Data-Engineer
⚡️ При изучении дата-инжиниринга часто возникает вопрос: «откуда брать данные?»
1️⃣ Брать реальные данные откуда‑то.
2️⃣ Генерить данные самостоятельно.
Первый вариант хорош, но сложнее, потому что к такого вида данным сложнее получить доступ и я бы этот вариант использовал, если вы хотите на этих данных строить какой‑то продукт или аналитику. Если обобщить, то сделать данные «полезными».
Второй вариант как по мне более предпочтителен, потому что вы сможете проверить больше инструментов и возможностей в своих pet‑проектах и не особо задумываться над качеством и источником данных. Но также стоит упомянуть, что можно генерировать довольно правдоподобные данные, которые можно будет использовать для аналитики или визуализаций.
APILayer APIs
Faker
🖥 Оптимизировал пример создания ненастоящего пользователя:
⌨️ Теги: #analytics #faker #api #generate #user #profile #данные #генерация #quadd4rv1n7 #maximdupley #2024
Первый вариант хорош, но сложнее, потому что к такого вида данным сложнее получить доступ и я бы этот вариант использовал, если вы хотите на этих данных строить какой‑то продукт или аналитику. Если обобщить, то сделать данные «полезными».
Второй вариант как по мне более предпочтителен, потому что вы сможете проверить больше инструментов и возможностей в своих pet‑проектах и не особо задумываться над качеством и источником данных. Но также стоит упомянуть, что можно генерировать довольно правдоподобные данные, которые можно будет использовать для аналитики или визуализаций.
APILayer APIs
Faker
from faker import Faker
from datetime import timedelta
import random
fake = Faker(locale='ru_RU')
def generate_fake_user(min_age=18, max_age=70, registration_years=5):
"""
Генерирует фейковый профиль пользователя.
:param min_age: минимальный возраст пользователя
:param max_age: максимальный возраст пользователя
:param registration_years: максимальное количество лет назад для даты регистрации
:return: словарь с данными пользователя
"""
# Генерация даты рождения и даты регистрации
birthday = fake.date_of_birth(minimum_age=min_age, maximum_age=max_age)
registration_at = fake.date_time_between(start_date=f"-{registration_years}y", end_date="now")
# Генерация фейкового профиля пользователя
fake_user = {
'first_name': fake.first_name(),
'last_name': fake.last_name(),
'middle_name': fake.middle_name(),
'phone_number': fake.phone_number(),
'email': fake.email(),
# Генерация адресных данных с логической структурой
'address': {
'country': fake.country(),
'country_code': fake.country_code(),
'region': fake.region(),
'city': fake.city(),
'street_address': fake.street_address(),
'postcode': fake.postcode(),
},
# Дополнительные сведения о пользователе
'occupation': fake.job(),
'company': fake.company(),
'work_phone': fake.phone_number(),
'marital_status': random.choice(['Single', 'Married', 'Divorced', 'Widowed']),
'website': fake.url(),
# Даты
'registration_at': registration_at,
'birthday': birthday,
# Профиль в социальных сетях и банковские реквизиты (при необходимости)
'social_profile': fake.url(),
'credit_card': {
'number': fake.credit_card_number(),
'provider': fake.credit_card_provider(),
'expiration_date': fake.credit_card_expire(),
}
}
return fake_user
# Пример использования
fake_user = generate_fake_user()
print(fake_user)
⌨️ Теги: #analytics #faker #api #generate #user #profile #данные #генерация #quadd4rv1n7 #maximdupley #2024
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Pet-проекты и данные для Data-Engineer
При изучении дата-инжиниринга часто возникает вопрос: « откуда брать данные? » И тут я вижу два варианта: Брать реальные данные откуда‑то. Генерить данные самостоятельно. Первый вариант хорош,...
👍2
Релиз Bruno 1.35
Bruno API Client обновился до версии 1.35, добавив параллельный запуск запросов, поддержку GraphQL через cURL и новые функции для Postman, включая массовый импорт окружений.
Теперь можно запускать запросы одновременно, что ускоряет тестирование, а так же ускорена работа с большими токенами доступа и добавлены настройки для клиентских сертификатов.
Ставьте «❤️», если пост был интересным
⌨️ Теги: #разработка #аналитика #проектирование #моделирование #bruno #api #client #curl #postman #maximdupley #quadd4rv1n7 #2024 #2025
Bruno API Client обновился до версии 1.35, добавив параллельный запуск запросов, поддержку GraphQL через cURL и новые функции для Postman, включая массовый импорт окружений.
Теперь можно запускать запросы одновременно, что ускоряет тестирование, а так же ускорена работа с большими токенами доступа и добавлены настройки для клиентских сертификатов.
Ставьте «❤️», если пост был интересным
⌨️ Теги: #разработка #аналитика #проектирование #моделирование #bruno #api #client #curl #postman #maximdupley #quadd4rv1n7 #2024 #2025
1👍2
💻 В чём разница между REST и gRPC
☀️ REST — это архитектурный стиль взаимодействия между компонентами распределённой системы через интернет, чаще всего используется в веб-приложениях.
☀️ gRPC — это современный фреймворк для создания высокопроизводительных распределённых систем, разработанный Google.
Он основан на протоколе
📱 Выбор между REST и gRPC зависит от требований проекта.
REST подходит для публичных
Ставьте «🥰 », если пост вам понравился
⌨️ Теги: #rest #api #grpc #maximdupley #quadd4rv1n7 #2024 #2025 #maestro7it #разработка #сопровождение #аналитика #системное_программирование #программирование #it #programming #web
Он основан на протоколе
HTTP/2
и использует Protocol Buffers (protobuf)
для сериализации данных.REST подходит для публичных
API
и простых веб-приложений, а gRPC — для микросервисной архитектуры и высоконагруженных систем.Ставьте «
⌨️ Теги: #rest #api #grpc #maximdupley #quadd4rv1n7 #2024 #2025 #maestro7it #разработка #сопровождение #аналитика #системное_программирование #программирование #it #programming #web
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
💻 В чём разница между REST и gRPC
🖥️ Канал на RuTube: https://rutube.ru/channel/4218729🖥️ VK Группа: https://vk.ru/public183207497🖥️ Telegram Канал: https://t.me/it_baza_znaniy🌐 Курс «Про...
1👍1
Библиотека
AnyIO
упрощает работу с асинхронным кодом в Python.Позволяет писать универсальные программы, которые могут работать с разными системами асинхронности, такими как
asyncio
или Trio
.Основные возможности библиотеки:
pip install anyio
Ставьте «
⌨️ Теги: #anyio #python #library #io #websocket #api #trio #maximdupley #quadd4rv1n7 #2024 #2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Библиотека
json-repair
предназначена для автоматического исправления ошибок в JSON-документах.Помогает работать с поврежденными или плохо отформатированными JSON-файлами, делая их пригодными для обработки стандартными средствами, такими как
json
из стандартной библиотеки Python.pip install json-repair
Ставьте «
⌨️ Теги: #anyio #python #library #io #websocket #api #trio #maximdupley #quadd4rv1n7 #2024 #2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Библиотека
sqlparse
предназначена для форматирования, анализа и работы со SQL-запросами.Не выполняет SQL-запросы, а предоставляет инструменты для их обработки как текста.
Основные возможности библиотеки:
pip install sqlparse
Ставьте «
⌨️ Теги: #sql #python #library #sqlparse #api #maximdupley #quadd4rv1n7 #2024 #2025
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
ViewComfy — это инструмент с открытым исходным кодом, который поможет вам создавать прекрасные веб-приложения на основе ComfyUI.
4️⃣ GitHub
➡️ Хижина программиста
Ставьте «🥰 », если пост вам понравился
⌨️ Теги: #github #git #comfy #инструмент #web #приложение #api #maximdupley #quadd4rv1n7 #2024 #2025
Ставьте «
⌨️ Теги: #github #git #comfy #инструмент #web #приложение #api #maximdupley #quadd4rv1n7 #2024 #2025
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Библиотека
CTkMessagebox
— это дополнение к библиотеке CustomTkinter, которая предоставляет современные настраиваемые элементы интерфейса для Python.CTkMessagebox
позволяет создавать диалоговые окна с сообщениями, кнопками и различными вариантами действий в стиле CustomTkinter
.Основные возможности библиотеки:
import customtkinter as ctk
from CTkMessagebox import CTkMessagebox
# Инициализация CustomTkinter
ctk.set_appearance_mode("dark")
ctk.set_default_color_theme("blue")
# Создание главного окна
root = ctk.CTk()
root.geometry("400x300")
root.title("Пример CTkMessagebox")
def show_messagebox():
msg_box = CTkMessagebox(
title="Пример сообщения",
message="Вы уверены, что хотите продолжить?",
icon="question", # Доступные иконки: 'info', 'warning', 'error', 'question'
option_1="Да",
option_2="Нет"
)
result = msg_box.get() # Получение результата нажатия кнопки
print(f"Нажата кнопка: {result}")
# Кнопка для вызова CTkMessagebox
button = ctk.CTkButton(root, text="Показать сообщение", command=show_messagebox)
button.pack(pady=20)
root.mainloop()
Для использования CTkMessagebox необходимо сначала установить CustomTkinter.
pip install customtkinter
pip install CTkMessagebox
Ставьте «
⌨️ Теги: #github #customtkinter #инструмент #web #приложение #api #maximdupley #quadd4rv1n7 #2024 #2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
WebVM — это виртуальная среда без сервера, работающая полностью на стороне клиента в HTML5/WebAssembly.
Она разработана для совместимости с Linux ABI.
4️⃣ GitHub
➡️ Хижина программиста
Ставьте «🥰 », если пост вам понравился
⌨️ Теги: #linux #webvm #virtualmachine #vm #api #maximdupley #quadd4rv1n7 #2024 #2025
Она разработана для совместимости с Linux ABI.
Ставьте «
⌨️ Теги: #linux #webvm #virtualmachine #vm #api #maximdupley #quadd4rv1n7 #2024 #2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Для получения случайных вопросов с вариантами ответов и правильным ответом через API в коде используется библиотека
requests
.pip install requests
import requests
from googletrans import Translator
# URL API для получения вопросов
url = "https://opentdb.com/api.php"
# Инициализация класса Translator
translator = Translator()
# Параметры запроса для получения 5 случайных вопросов
params = {
"amount": 5, # Количество вопросов
"type": "multiple" # Тип вопросов (многовариантные)
}
# Отправка запроса
response = requests.get(url, params=params)
# Проверка успешности запроса
if response.status_code == 200:
data = response.json()
# Перебор вопросов и вывод их на экран
for idx, question in enumerate(data['results'], start=1):
question['question'] = translator.translate(question['question'], dest='ru').text
question['correct_answer'] = translator.translate(question['correct_answer'], dest='ru').text
question['incorrect_answers'] = [translator.translate(option, dest='ru').text for option in question['incorrect_answers']]
print(f"Вопрос {idx}: {question['question']}")
print("Варианты ответа:")
for option in question['incorrect_answers']:
print(f"- {option}")
print(f"- {question['correct_answer']} (Правильный ответ)\n")
else:
print("Ошибка при получении данных:", response.status_code)
Ставьте «
⌨️ Теги: #python #api #answer #response #requests #maximdupley #quadd4rv1n7 #2024 #2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1