@zebrains/velund-python
v1.0.1
Published
Python-генератор для системы UI-компонентов Velund
Readme
@zebrains/velund-python
Python-генератор для системы UI-компонентов Velund.
Этот пакет позволяет использовать Velund-компоненты в Python-бэкенд-приложениях. Он преобразует определения фронтенд-компонентов в готовую Python-библиотеку и предоставляет удобный API для их рендеринга через выбранный шаблонизатор.
🚀 Ключевые особенности
- Генерация Python-библиотеки: формирует готовый к использованию Python-пакет (
velund/lib), который можно напрямую подключать в бэкенд-приложение. - Гибкая поддержка рендереров: работает с
HTMLиJinja. - Интеграция с Velund: полностью совместим с ядром Velund и другими генераторами.
- Серверная логика: поддержка
prepare-функций для асинхронной подготовки данных перед рендерингом.
📦 Установка
pnpm add @zebrains/velund-pythonТакже установите необходимые рендереры (например, Jinja):
pnpm add @zebrains/velund-jinja🛠️ Использование в проекте Velund
Чтобы подключить @zebrains/velund-python в проекте, зарегистрируйте его в конфигурации плагина velund в vite.config.ts:
// vite.config.ts
import { defineConfig } from 'vite';
import velund from 'velund';
import pythonGenerator from '@zebrains/velund-python'; // Импорт Python-генератора
import jinjaRenderer from '@zebrains/velund-jinja'; // Пример: Jinja-рендерер
export default defineConfig({
plugins: [
velund({
generator: 'python', // Указываем Python как основной генератор
renderer: 'jinja', // Указываем Jinja как основной рендерер
renderers: [
jinjaRenderer(), // Регистрируем используемые рендереры
],
generators: [
pythonGenerator(), // Добавляем Python-генератор
],
}),
],
});📂 Результат генерации
После сборки фронтенд-проекта (pnpm run build), Python-генератор создаст:
- Python-модули для компонентов Velund (
velund/lib); - вспомогательные классы для рендеринга;
- поддержку выбранного шаблонизатора (например, Jinja).
Сгенерированную библиотеку можно напрямую подключать в ваше Python-приложение.
💻 Пример использования во Flask-приложении
from flask import Flask, request, send_from_directory
import asyncio
import aiohttp
from pathlib import Path
import sys
# Добавляем путь к сгенерированной библиотеке velund
velund_path = Path(__file__).parent / 'velund' / 'lib'
sys.path.insert(0, str(velund_path))
# Импортируем из пакета velund
from velund.lib import HomePage, ProductPage, register, get
app = Flask(__name__)
port = 3333
# Настраиваем обслуживание статических файлов
public_dir = Path(__file__).parent / 'velund' / 'assets'
app.add_url_rule('/assets/<path:filename>',
endpoint='assets',
view_func=lambda filename: send_from_directory(public_dir, filename))
# Регистрируем prepare-функции
async def home_page_prepare(props: dict) -> dict:
async with aiohttp.ClientSession() as session:
async with session.get('https://fakestoreapi.com/products') as response:
products = await response.json()
return {'products': products}
async def product_page_prepare(props: dict) -> dict:
product_id = props.get('id')
if not product_id:
return {}
async with aiohttp.ClientSession() as session:
async with session.get(f'https://fakestoreapi.com/products/{product_id}') as response:
product = await response.json()
return product
# Регистрируем prepare-функции для компонентов
register("HomePage", home_page_prepare)
register("ProductPage", product_page_prepare)
# Импортируем Renderer после настройки путей
from velund.lib import Renderer
renderer = Renderer()
@app.route('/')
async def home():
html = await renderer.render('HomePage', {})
return html
@app.route('/ProductPage')
async def product_page():
params = request.args.to_dict()
html = await renderer.render('ProductPage', params)
return html
if __name__ == '__main__':
app.run(port=port, debug=True)🔗 См. также
- Velund — Плагин Velund
- @zebrains/velund-php — PHP-генератор
- @zebrains/velund-twig — Twig-рендерер
- @zebrains/velund-jinja — Jinja-рендерер
