Pyweber is a lightweight Python web framework designed to create dynamic, reactive web applications with a simple and intuitive API. It combines the simplicity of Python with the reactivity of modern frontend frameworks.
- Reactive Templates: Create dynamic UIs that automatically update when data changes
- Component-Based Architecture: Build reusable components for consistent interfaces
- Integrated Hot Reload: See changes instantly during development
- Intuitive DOM Manipulation: Query and modify elements with familiar selectors
- Event-Driven Programming: Handle user interactions with Python event handlers
- WebSocket Integration: Real-time communication between client and server
- Minimal Configuration: Get started quickly with sensible defaults
pip install pyweber# Create a new project with configuration
pyweber create-new my_app --with-config
cd my_appimport pyweber as pw
class Main(pw.Element):
def __init__(self):
super().__init__(tag='div', classes=['counter'])
self.childs = [
pw.Element('h1', content='Pyweber Counter'),
pw.Element(
tag='p',
content='Count:',
childs=[
pw.Element('span', id='count', content=0)
]
),
pw.Element(
'button',
id='increment',
content='Increment',
events=pw.TemplateEvents(onclick=self.increment)
)
]
async def increment(self, e: pw.EventHandler):
self.count = e.template.querySelector("#count")
current = int(self.count.content)
self.count.content = str(current + 1)
self.create_element()
e.update()
def create_element(self):
self.count.parent.parent.add_child(
pw.Element(
tag='p',
content=self.count.content
)
)
class Counter(pw.Template):
def __init__(self):
super().__init__(template='', title='Hello pyweber')
self.body.childs = [Main()]
app = pw.Pyweber()
@app.route('/')
def home():
return Counter()
if __name__ == "__main__":
pw.run(route='/')Run your application:
pyweber run --reloadThe main application class that handles routing, middleware, and template management:
app = pw.Pyweber()
@app.route('/')
def home():
return HomePage()
@app.route('/users/{user_id}')
def user_profile(user_id: int):
return UserProfile(user_id=user_id)Templates represent pages or components with HTML structure and Python logic:
class HomePage(pw.Template):
def __init__(self, app: pw.Pyweber):
super().__init__(template="index.html")
self.title = self.querySelector("h1")
self.title.content = "Welcome to PyWeber!"Elements represent DOM nodes that you can manipulate:
# Create elements
button = pw.Element(tag="button", content="Click me", id="my-button")
# Modify properties
button.content = "Clicked!"
button.attrs["disabled"] = "true"
button.style["color"] = "red"
button.add_class("active")Handle user interactions with Python functions:
# Define event handlers
async def handle_click(e: pw.EventHandler):
e.element.content = "Processing..."
e.update()
await process_data()
e.element.content = "Done!"
e.update()
# Attach events
button.events.onclick = handle_clickInteract with the browser window:
# Access window properties
width = template.window.inner_width
scroll_pos = template.window.scroll_y
# Register window events
template.window.events.onresize = handle_resize
template.window.events.onscroll = handle_scroll| Feature | PyWeber | Flask | Django | React |
|---|---|---|---|---|
| Learning Curve | Low | Low | High | High |
| Reactivity | Built-in | Manual | Manual | Built-in |
| DOM Manipulation | Python API | JavaScript | JavaScript | JSX |
| Hot Reload | Built-in | Add-on | Add-on | Built-in |
| Template Language | Python + HTML | Jinja2 | DTL | JSX |
| Server-Side | Yes | Yes | Yes | No (by default) |
| Configuration | Simple TOML | Environment vars | settings.py | package.json |
| CLI Tools | Comprehensive | Limited | Extensive | Extensive |
PyWeber provides a flexible configuration system:
# Access configuration
from pyweber.config.config import config
# Get values
port = config.get("server", "port")
debug = config.get("app", "debug")
# Set values
config.set("server", "port", 9000)Create or edit configuration files:
# Create config file
pyweber create-config-file
# Edit interactively
pyweber --editPyWeber includes a powerful CLI:
# Create projects
pyweber create-new my_project
# Run applications
pyweber run --reload
# Manage configuration
pyweber add-section --section-name database
# Update framework
pyweber --updateVisit Pyweber Docs for complete documentation.
