首页 » 软件开发 » 看看它是否比Streamlit更好。(应用程序文章状态组件框架)

看看它是否比Streamlit更好。(应用程序文章状态组件框架)

admin 2024-07-24 03:26:42 软件开发 0

扫一扫用手机浏览

文章目录 [+]

我发现,也许我应该试一试,看看它是否真的比Streamlit更好。
虽然我喜欢Streamlit,因为它超级直观的编码体验和从稀薄的空气中生成应用程序的能力,但当你看到界面时,你就知道它是Streamlit。

为了解决这个问题,我写了一篇关于如何纯粹使用Python和Tailwind CSS开发漂亮网络应用程序的博客,这出乎意料地爆炸了。
你可以在这里阅读。
这个过程对生产更友好,但如果您也想构建可定制的原型呢?

这正是梅索普所做的。

看看它是否比Streamlit更好。(应用程序文章状态组件框架) 看看它是否比Streamlit更好。(应用程序文章状态组件框架) 软件开发
(图片来自网络侵删)

TL;DR:Mesop仍处于初生阶段,所以不要开始在键盘上挖掘小费,从中构建SaaS初创公司。
此外,它没有得到谷歌的正式支持。

Mesop的特点开源。
易于开始使用预构建组件。
惯用Python编写代码。
热重新加载。
组件基本上是Python函数。
建立在Angular上。
开始使用Mesop

由于我讨厌用关于技术不同功能的长篇文献来烦人,让我们直接用Mesop构建一些基本的用户界面。
使用Mesop构建时,您主要需要注意三个组件:

看看它是否比Streamlit更好。(应用程序文章状态组件框架) 看看它是否比Streamlit更好。(应用程序文章状态组件框架) 软件开发
(图片来自网络侵删)
状态类:这将作为您的会话状态,并提供在不同组件之间共享数据的能力。
页面和事件:应用程序的主要用户界面。
样式元素:CSS样式(尾风支持尚未到来)

在开始之前,请确保使用pip install mesop安装mesop。

州级

应用程序中使用的所有模型都是使用带有装饰器@me.stateclass的状态类实例化的。
假设您正在构建一个GenAI应用程序,以使用标题和大纲生成文章,您必须创建一个名为“文章”的状态类,其外观如下:

像我一样进口梅索普@me.stateclass类文章:标题:str大纲:str回应:str

在我们创建的每个函数或组件中,此状态类数据将始终存在,并可在全球范围内访问。

页面和事件

与状态类类似,所有页面都使用Mesop中的@me.page()decorator进行标记。

@me.page()def app():me.input(label="Title", type="text")me.input(label="Outline", type="text")

上述代码将生成一个包含两个输入字段的基本页面。
为了能够将数据存储在我们之前创建的状态类中,每个字段都需要一个单独的函数。

def on_title_input(标题:me.InputEvent):s = me.state(文章)s.title = title.valuedef on_outline_input(outline:me.InputEvent):s = me.state(文章)s.outline = outline.value@me.page()def app():me.input(label="Title", on_input=on_title_input, type="text")me.input(label="Outline", on_input=on_outline_input, type="text")

要访问状态类,使用的函数是me.state()然后,实例存储在变量s中。

Mesop中的事件使用InputEvent、ClickEvent等类进行处理。

我们可以通过为ClickEvent调用另一个函数来提交输入数据。

#响应模式类博客(typing_extensions.TypedDict):标题:str内容:strdef on_title_input(标题:me.InputEvent):s = me.state(文章)s.title = title.valuedef on_outline_input(outline:me.InputEvent):s = me.state(文章)s.outline = outline.valuedef on_click(点击:me.ClickEvent):s = me.state(文章)prompt = f"就以下文章标题和大纲撰写博客:<article_title>{s.title}</article_title><article_outline>{s.outline}</article_outline>。
仅以标记格式返回最终博客和标题。
” #添加环境变量以存储钩子URL响应 = model.generate_content(提示,generation_config=genai.GenerationConfig(response_mime_type="application/json",response_schema=博客,温度=0.8))数据 = json.loads(response.text)s.response = 数据@me.page()def app():me.input(label="Title", on_input=on_title_input, type="text")me.input(label="Outline", on_input=on_outline_input, type="text")me.button(“生成博客”,on_click=on_click)

To make stuff interesting, we will be using the Gemini models to generate a blog using Mesop. The on_click function will fetch data s.title and s.outline from the Article instance and inject that into the prompt we have created. The response of the LLM will be a JSON containing the blog content.

款式

Mesop中的样式元素与现有的CSS属性相似,但所有属性都是me.style()中的参数。

使用me.style()定义样式后,它们可以存储在变量中,并在组件本身中作为参数调用。

_STYLE_INPUT_WIDTH = me.Style(width="100%")_STYLE_BUTTON = me.Style(背景="#1976D2",color="#fff",padding=me.Padding.symmetric(水平=20,垂直=10),font_size="16px",cursor="指针",margin=me.Margin(底部=20),)@me.page()def app(): with me.box(style=_STYLE_CONTAINER):s = me.state(文章) with me.box(style=_STYLE_MAIN_COLUMN):me.input(label="Title", on_input=on_title_input, type="text", style=_STYLE_INPUT_WIDTH)me.input(label="Outline", on_input=on_outline_input, type="text", style=_STYLE_INPUT_WIDTH)me.button(“生成博客”,on_click=on_click,style=_STYLE_BUTTON) with me.box(style=_STYLE_PREVIEW_CONTAINER): 如果s.response:me.markdown(f"{s.response['content']}", style=_STYLE_PREVIEW)最终界面

不是最好看的用户界面,但那是因为我没有努力设计足够的风格。
它看起来仍然比原始HTML好得多,只需在这里和那里进行一些调整。
通过对组件使用所有CSS属性的能力,您可以使UI独一无二。

Streamlit死了吗?

不,绝对不是。
Mesop仍在开发中,某些方面缺乏文档。
部署Mesop应用程序并不简单,需要容器化,除非您直接将其部署到谷歌云。

Streamlit仍然有其自身的一系列优势,并且与Mesop相比从根本上更强大,特别是如果您想在数据可视化领域构建一些东西。
此外,Streamlit Cloud对任何希望完全免费共享其应用程序的人来说都是福音。

然而,Mesop有增长的潜力,并且每天都在接收更新,由于其轻量级的性质,使其在REST API上工作的快速工具和简单原型更加可行。

感谢Will和Mesop的所有其他贡献者花时间和精力来开发和维护这样一个框架。

我们需要更多的UI框架

看到新的Python UI框架弹出总是好的,例如Streamlit、Nicegui、Gradio和现在的Mesop。
Python的惯用语法使编码更容易访问,这从现在Streamlit项目的数量中可以看出。

无论幸运还是不幸,Python是我学到的第一门编程语言,我立即爱上了它。
有了更多这样的框架,Python的使用量将迅速增长,我希望将来能看到更多生产级的Python应用程序。

我希望你喜欢Mesop上的这个简短的博客,它将帮助你开始。
我本可以更深入地研究,但时间的缺乏使我使这个博客更短,我也考虑了我们所有人的金鱼级别的注意力跨度。
如果您能为这篇文章鼓掌,与Python和谷歌社区的更多用户分享,并关注我以获取更多此类文章,我将不胜感激。

标签:

相关文章