使用 Jinga2、FastAPI、Pydantic、htmx 和一点魔法快速构建 UI
项目描述
概述
QuikUI 是一个库,用于将 Pydantic 模型以 HTML 组件的形式进行上下文服务器端渲染,使用 Jinja2 进行模板渲染,旨在与基于 FastAPI 的应用程序无缝协作。QuikUI 的主要优点之一是,它允许您通过在您的模型类层次结构中仅通过继承 quikui.BaseComponent
来创建完全定制的 HTML,从而使您可以通过仅添加 quikui.render_component
装饰器轻松地将 HTML 渲染集成到现有的 FastAPI 应用程序中。此外,这种渲染是上下文相关的,它使用 FastAPI 请求的启发式方法,即如果网络浏览器向您的应用程序中的受支持端点发出请求,则应用程序将以渲染的 HTML 响应,而不是将您的模型转换为 JSON。
安装
要安装 QuikUI,请使用 pip
或您喜欢的包安装工具
$ pip install quikui
示例
我们在本存储库中有示例,您可以通过以下方式运行
uvicorn example:app
用法
建议您在您的层次结构的基类中继承 quikui.BaseComponent
,这样您就可以配置自己的模板目录
import quikui as qk
class Component(qk.BaseComponent):
html_template_package = "your_package_name"
# a folder called `templates/` under this package should contain your html templates
# Now you can subclass `Component` to enable rendering of your models.
模型根据其类名进行渲染,因此如果您有一个类似
class MyModel(Component, ...):
a_field: str = Field(...) # Works with any Pydantic Model type
...
的类,那么预计在您的包的模板目录下将有一个名为 MyModel.html
的文件
{# This is a Jinj2 template #}
{{ __component_name__ }} {{ __extra_attrs__ }}
{{ a_field }}
...
模板可以使用您的模型中的任何命名字段(类型不会转换,因此请相应处理),或者可以使用QuikUI提供的字段__component_name__
(模型的名称,例如MyModel
)和__extra_attrs__
(这是以k="v"
格式渲染的"安全"HTML属性字符串,包括class
属性)。
此外,当子类化时,还有两个字段被注入到您的模型中(通过model_dump
和model_dump_json
导出模型时这些字段是隐藏的),您可以使用这些字段来自定义对象:attrs=dict(...)
(HTML5兼容的字符串属性名称到字符串或布尔值的映射)和css=set(...)
(要连接的字符串CSS类名集)。
贡献
打开问题。
项目详情
下载文件
下载适合您平台的应用程序。如果您不确定选择哪个,请了解有关安装包的更多信息。