README.md 1.6 KB

nicegui

这个项目有点类似 gradio,python 快速开发web前后端项目。

用户无需编写css,html,直接通过python代码快速布局,并使用 fastapi ,快速打通前后端。此外对接sqlite数据库。

目前还不成熟,组件不是很多,UI可定制性不强。

Usage

直接打开 https://github.com/zauberzeug/nicegui 下 examples目录查看代码,使用比较简单。

main.py

import frontend
from fastapi import FastAPI

app = FastAPI()


@app.get('/')
def read_root():
    return {'Hello': 'World'}


frontend.init(app)

frontend.py

from fastapi import FastAPI

from nicegui import app, ui


def init(fastapi_app: FastAPI) -> None:
    @ui.page('/show')
    def show():
        ui.label('Hello, FastAPI!')

        # NOTE dark mode will be persistent for each user across tabs and server restarts
        ui.dark_mode().bind_value(app.storage.user, 'dark_mode')
        ui.checkbox('dark mode').bind_value(app.storage.user, 'dark_mode')

    ui.run_with(
        fastapi_app,
        storage_secret='pick your private secret here',  # NOTE setting a secret is optional but allows for persistent storage per user
    )

启动:

uvicorn main:app --reload --log-level debug --port 8000

源码分析

首先 nicegui 基于fastapi开发web。

当执行启动命令,调用 uvicorn 命令,启动一个 FastAPI 实例app,在 frontend.py 中定义UI,但是python不需要编译,那怎么渲染页面呢?

比如添加

ui.label('Hello, FastAPI!')

代码,如何在页面上生成一个div呢?