You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
248 lines
6.2 KiB
248 lines
6.2 KiB
Development Mode |
|
================ |
|
|
|
BadGUI provides two development workflows: **Instant Development** with ``bg.dev()`` and **Static Project Generation** with ``bg.build()``. |
|
|
|
Instant Development with bg.dev() |
|
---------------------------------- |
|
|
|
The ``bg.dev()`` method provides the fastest development experience by automatically: |
|
|
|
1. Creating a temporary project build |
|
2. Installing npm dependencies |
|
3. Starting the development server |
|
4. Opening your app in the browser |
|
5. Cleaning up temporary files on exit |
|
|
|
Basic Usage |
|
~~~~~~~~~~~ |
|
|
|
.. code-block:: python |
|
|
|
import badgui as bg |
|
|
|
with bg.page("/", "HomePage", "My App"): |
|
bg.label("Hello World!").classes("text-h3 text-primary") |
|
bg.button("Click Me").classes("q-btn-primary") |
|
|
|
# 🚀 One command does it all! |
|
bg.dev() |
|
|
|
Run your script:: |
|
|
|
python my_app.py |
|
|
|
The server starts automatically at ``http://localhost:9000``. |
|
|
|
Configuration Options |
|
~~~~~~~~~~~~~~~~~~~~~ |
|
|
|
Customize the development server: |
|
|
|
.. code-block:: python |
|
|
|
bg.dev( |
|
port=3000, # Custom port (default: 9000) |
|
host="localhost", # Bind to specific host (default: localhost) |
|
auto_reload=False, # Auto-rebuild on file changes (default: False) |
|
project_name="my-app" # Temporary project name (default: badgui-dev) |
|
) |
|
|
|
Advanced Example |
|
~~~~~~~~~~~~~~~~ |
|
|
|
.. code-block:: python |
|
|
|
import badgui as bg |
|
|
|
def create_app(): |
|
with bg.page("/", "HomePage", "Development Demo"): |
|
bg.label("🚀 Live Development Mode").classes("text-h2 text-center q-mb-lg") |
|
|
|
with bg.row().classes("justify-center q-gutter-md") as row: |
|
bg.button("Primary").classes("q-btn-primary") |
|
bg.button("Secondary").classes("q-btn-secondary") |
|
bg.button("Accent").classes("q-btn-accent") |
|
|
|
with bg.column().classes("q-mt-lg max-width-sm mx-auto") as form: |
|
bg.input(placeholder="Name").classes("q-mb-md").props("filled") |
|
bg.input(placeholder="Email").classes("q-mb-md").props("filled type=email") |
|
bg.button("Submit").classes("q-btn-primary full-width") |
|
|
|
if __name__ == "__main__": |
|
create_app() |
|
|
|
# Development mode with custom settings |
|
bg.dev( |
|
port=3000, |
|
host="0.0.0.0", # Accept connections from any IP |
|
project_name="live-demo" |
|
) |
|
|
|
Benefits of bg.dev() |
|
~~~~~~~~~~~~~~~~~~~~ |
|
|
|
- **Zero Setup**: No manual ``npm install`` or server commands |
|
- **Fast Iteration**: Make changes and refresh browser |
|
- **Temporary Files**: No clutter in your project directory |
|
- **Automatic Cleanup**: Temp files removed on exit |
|
- **Cross-Platform**: Works on Windows, macOS, and Linux |
|
|
|
Multi-Page Development |
|
~~~~~~~~~~~~~~~~~~~~~~ |
|
|
|
``bg.dev()`` works seamlessly with multi-page applications: |
|
|
|
.. code-block:: python |
|
|
|
import badgui as bg |
|
|
|
# Home page |
|
with bg.page("/", "HomePage", "Home"): |
|
bg.label("Welcome Home").classes("text-h3") |
|
bg.link("Go to About", "/about").classes("q-btn q-btn-primary") |
|
|
|
# About page |
|
with bg.page("/about", "AboutPage", "About"): |
|
bg.label("About Us").classes("text-h3") |
|
bg.link("Back Home", "/").classes("q-btn q-btn-secondary") |
|
|
|
# Contact page |
|
with bg.page("/contact", "ContactPage", "Contact"): |
|
bg.label("Contact Us").classes("text-h3") |
|
bg.input(placeholder="Message").props("filled type=textarea") |
|
bg.button("Send").classes("q-btn-primary") |
|
|
|
# Start development server |
|
bg.dev(port=8080) |
|
|
|
Static Project Generation |
|
------------------------- |
|
|
|
For production deployment or when you need full control over the build process, use ``bg.build()``. |
|
|
|
Basic Build |
|
~~~~~~~~~~~ |
|
|
|
.. code-block:: python |
|
|
|
import badgui as bg |
|
|
|
with bg.page("/", "HomePage", "Production App"): |
|
bg.label("Production Ready").classes("text-h3") |
|
|
|
# Generate static project |
|
bg.build( |
|
output_dir="./dist", # Output directory |
|
project_name="my-prod-app", # Project name |
|
) |
|
|
|
Manual Development |
|
~~~~~~~~~~~~~~~~~~ |
|
|
|
After building, you can develop manually:: |
|
|
|
cd dist |
|
npm install |
|
npm run dev # Development server |
|
npm run build # Production build |
|
|
|
Deployment |
|
~~~~~~~~~~ |
|
|
|
Build for production deployment:: |
|
|
|
cd dist |
|
npm install |
|
npm run build |
|
|
|
# Deploy the dist/ folder contents to your web server |
|
|
|
When to Use Each Mode |
|
--------------------- |
|
|
|
**Use bg.dev() when:** |
|
|
|
- 🚀 Rapid prototyping and development |
|
- ⚡ Quick testing of UI changes |
|
- 🔧 Learning BadGUI features |
|
- 💻 Local development and experimentation |
|
|
|
**Use bg.build() when:** |
|
|
|
- 🌐 Preparing for production deployment |
|
- 📦 Need to customize the build process |
|
- 🔧 Integrating with CI/CD pipelines |
|
- 📝 Sharing projects with frontend developers |
|
|
|
Best Practices |
|
-------------- |
|
|
|
Development Workflow |
|
~~~~~~~~~~~~~~~~~~~ |
|
|
|
1. **Start with bg.dev()** for rapid development |
|
2. **Use version control** to track your Python code |
|
3. **Test different devices** using ``host="0.0.0.0"`` |
|
4. **Switch to bg.build()** when ready for deployment |
|
|
|
Project Organization |
|
~~~~~~~~~~~~~~~~~~~~ |
|
|
|
.. code-block:: python |
|
|
|
# main.py |
|
import badgui as bg |
|
from pages import home, about, contact |
|
|
|
def main(): |
|
home.create_page() |
|
about.create_page() |
|
contact.create_page() |
|
|
|
if __name__ == "__main__": |
|
bg.dev(port=3000) |
|
|
|
# pages/home.py |
|
import badgui as bg |
|
|
|
def create_page(): |
|
with bg.page("/", "HomePage", "Home"): |
|
bg.label("Home Page Content") |
|
|
|
Troubleshooting |
|
--------------- |
|
|
|
**Port Already in Use** |
|
|
|
.. code-block:: python |
|
|
|
# Try a different port |
|
bg.dev(port=3001) |
|
|
|
**npm Not Found** |
|
|
|
Install Node.js from https://nodejs.org/ |
|
|
|
**Permission Errors** |
|
|
|
.. code-block:: bash |
|
|
|
# Linux/macOS - fix npm permissions |
|
sudo chown -R $(whoami) ~/.npm |
|
|
|
**Slow Dependencies Install** |
|
|
|
.. code-block:: python |
|
|
|
# The first run installs dependencies (can take 1-2 minutes) |
|
# Subsequent runs are much faster |
|
|
|
**Browser Not Opening** |
|
|
|
Manually navigate to the URL shown in the terminal output. |
|
|
|
Examples |
|
-------- |
|
|
|
Complete examples using ``bg.dev()`` are available in the :doc:`examples` section. |