Async Web Framework
Project description
Dazzler
Dazzler is a Python async UI/Web framework built with aiohttp and react. Create dazzling fast pages with a layout of Python components and bindings to update from the backend.
Install
Install with pip: $ pip install dazzler
Features
- Fast WebSocket based communication, deliver updates in realtime to thousands of connected clients at once.
- Lightweight bundles for fast initial page load.
- Support for third party integrations via middlewares.
- Session & authentication systems.
- No HTML/CSS/JS knowledge required, write everything with Python.
- Multi-page based.
- Hot reload.
- Tons of components.
- Tie & Transform API to perform updates on the client side.
- Build desktop applications with Electron.
Basic example
Create a page with a layout and assign bindings to save & load a visitor name with the session system. The button to save the visitor name is disabled if no input value via tie & transform.
from dazzler import Dazzler
from dazzler.system import Page, BindingContext, transforms as t
from dazzler.components import core
app = Dazzler(__name__)
page = Page(
__name__,
core.Container([
core.Html('H2', 'My dazzler page'),
core.Container('Please enter a name', identity='visitor-name'),
core.Input(value='', identity='input'),
core.Button('Save name', identity='save-btn', disabled=True),
], identity='layout', id='layout'),
title='My Page',
url='/'
)
# UI updates via tie & transforms
page.tie('value@input', 'disabled@save-btn').transform(
t.Length().t(t.Lesser(1))
)
# Bindings executes on the server via websockets.
@page.bind('clicks@save-btn')
async def on_click(context: BindingContext):
# Save the visitor name via session system
name = await context.get_aspect('input', 'value')
await context.session.set('visitor', name)
await context.set_aspect(
'visitor-name', children=f'Saved {name}'
)
# Aspects defined on the layout trigger on initial render and
# allows to insert initial data.
@page.bind('id@layout')
async def on_layout(context: BindingContext):
visitor = await context.session.get('visitor')
if visitor:
await context.set_aspect(
'visitor-name', children=f'Welcome back {visitor}!'
)
app.add_page(page)
if __name__ == '__main__':
app.start()
Documentation
Full documentation hosted on readthedocs.
Get help for the command line tools: $ dazzler --help
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
Built Distribution
File details
Details for the file dazzler-0.7.0-py3-none-any.whl
.
File metadata
- Download URL: dazzler-0.7.0-py3-none-any.whl
- Upload date:
- Size: 2.2 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.1 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 787e213dd51af4bffb3f5ac92e047679de0e3836e3f87af723655d365ea3e55e |
|
MD5 | b3f9a493865fe1f8031a7c564959cfc5 |
|
BLAKE2b-256 | 2da7af1724439d858c0c9864e384ab188e8e08a4f871a16d00fb50137965d52d |