FastUI:一个通过声明性Python代码构建网页应用UI的利器

文摘   2025-01-06 12:09   湖南  

FastUI是一种通过声明性Python代码构建网页应用用户界面(UI)的全新方式。对于Python开发者而言,它打破了传统的界限,让我们能够轻松创建响应式的Web应用,而无需编写一行JavaScript或接触npm。

Python开发者的福音

FastUI让Python开发者可以使用React构建现代网页应用,只需编写Python代码,无需关心底层实现细节。这意味着你可以专注于核心逻辑和功能,而不被繁琐的JavaScript语法和npm工具打扰。

前端开发者的利器

对于前端开发者,FastUI使你能够专注于构建真正可重用的组件。再也不需要在每个视图中重复造轮子,FastUI提供了模块化的方法,让你可以轻松地管理和复用组件,减少代码冗余。

关注点的真正分离

在FastUI的设计中,后端开发者负责整个应用的定义,而前端开发者则可以自由实现用户界面。这种分离让开发者能更好地协作,并提高开发效率,避免了传统开发方式中常见的沟通误区。

FastUI的核心结构

FastUI的核心是匹配的Pydantic模型和TypeScript接口,它们允许你定义用户界面。该接口由TypeScript在构建时以及Pydantic在运行时进行验证,确保了数据的一致性和安全性。

四大组成部分

  1. 1. fastui PyPI包:提供UI组件的Pydantic模型及一些实用工具。虽然与FastAPI协同工作得很好,但它不依赖于FastAPI,可以与任何Python Web框架一起使用。

  2. 2. @pydantic/fastui npm包:这是一个React TypeScript包,允许你重用FastUI的机制和类型,同时实现自己的组件。

  3. 3. @pydantic/fastui-bootstrap npm包:利用Bootstrap对所有FastUI组件进行实现和自定义的包。

  4. 4. @pydantic/fastui-prebuilt npm包:提供了预构建的FastUI React应用的版本,用户无需安装任何npm包或自行构建即可使用。

FastAPI示例应用

以下是一个使用FastUI显示用户简介的简单FastAPI应用示例:

from datetime import date
from fastapi importFastAPI,HTTPException
from fastapi.responses importHTMLResponse
from fastui importFastUI,AnyComponent, prebuilt_html, components as c
from fastui.components.display importDisplayMode,DisplayLookup
from fastui.events importGoToEvent,BackEvent
from pydantic importBaseModel,Field

app =FastAPI()

class User(BaseModel):
   id:int
    name:str
    dob: date =Field(title='Date of Birth')

# 定义一些用户
users =[
User(id=1, name='John', dob=date(1990,1,1)),
User(id=2, name='Jack', dob=date(1991,1,1)),
User(id=3, name='Jill', dob=date(1992,1,1)),
User(id=4, name='Jane', dob=date(1993,1,1)),
]

@app.get("/api/", response_model=FastUI, response_model_exclude_none=True)
def users_table()->list[AnyComponent]:
"""返回四个用户的表格数据"""
return[
        c.Page(
            components=[
                c.Heading(text='Users', level=2),
                c.Table(
                    data=users,
                    columns=[
DisplayLookup(field='name', on_click=GoToEvent(url='/user/{id}/')),
DisplayLookup(field='dob', mode=DisplayMode.date),],),]),]

@app.get("/api/user/{user_id}/", response_model=FastUI, response_model_exclude_none=True)
def user_profile(user_id: int)->list[AnyComponent]:
"""返回特定用户的个人资料页面"""
try:
        user =next(u for u in users if u.id== user_id)
except StopIteration:
raise HTTPException(status_code=404, detail="User not found")
return[
        c.Page(
            components=[
                c.Heading(text=user.name, level=2),
                c.Link(components=[c.Text(text='Back')], on_click=BackEvent()),
                c.Details(data=user),]),]

@app.get('/{path:path}')
asyncdef html_landing()->HTMLResponse:
"""返回简单HTML页面以服务于React应用"""
    return HTMLResponse(prebuilt_html(title='FastUI Demo'))

该示例展示了如何利用FastUI构建用户界面,呈现用户信息并实现页面之间的互动。

总结

FastUI作为一种新兴的Web开发工具,以其独特的声明式编程方式让Python开发者和前端开发者能够高效合作。通过将后端与前端的关注点分离,FastUI不仅简化了开发流程,还提升了代码的可维护性。无论是构建复杂的Web应用还是实现简单的用户界面,FastUI都提供了理想的解决方案。

项目地址:https://github.com/pydantic/FastUI


小白这样学Python
专注Python编程开发知识分享!
 最新文章