touch-callable:自动为 Python Function 生成 WebUI

2019-12-01 12:20:56 +08:00
 pengwkgood

给大家介绍一下我的业余项目: https://github.com/pengwk/touch-callable (求 Star 😝、求建议)

使用 Python 3 的 type annotation 特性,自动提取 Function 参数类型信息,生成 Web UI,只需要正常编写 Python function 就可以立刻开始一个简易的 Web 服务。

目前支持的类型有:

做这个项目的目的有两个:

后端使用的是 Flask,前端使用的是 Ant Design。

看一个例子:

# example.py
from datetime import datetime, date, time
from enum import Enum
import io
import typing


class Languages(Enum):
  Python = 'Python'
  PHP = 'PHP'
  Java = 'Java'


def demo(int_: int, str_: str, float_: float, bool_: bool,
         enum_: Languages,
         datetime_: datetime = datetime.now(),
         date_: date = date.today(),
         time_: time = time(1, 2, 3),
         bytes_io: io.BytesIO = None,
         binary_io: typing.BinaryIO = None):
  pass

会生成下面的界面:

4283 次点击
所在节点    分享创造
29 条回复
ipwx
2019-12-01 13:11:50 +08:00
泼一桶冷水:fastapi 已经很完善了
ila
2019-12-01 13:43:06 +08:00
swagger
pengwkgood
2019-12-01 16:16:09 +08:00
@ipwx 我想解决的不是 fastapi 想要解决的问题。fastapi 结合 type annotation 出 API 方便、专业,加上 swagger 调试起来很舒服,但是不是准备给不懂开发的人用的。

touch-callable 希望做到的是能生成一个简易但是非技术人员也能使用的 Web 界面,不需要使用这在界面上费心。只需要写好 function 加上 annotation 就好了。
pengwkgood
2019-12-01 16:16:41 +08:00
@ila swagger 太专业了,不是给非技术人员使用的。
rubycedar
2019-12-01 16:23:35 +08:00
py 迟早变成 php
pengwkgood
2019-12-01 16:25:40 +08:00
@rubycedar 这一起黑了,为什么?
rubycedar
2019-12-01 16:30:06 +08:00
@pengwkgood 编程就是程序员经过专业学习才能做的事情,为什么要考虑非技术人员?
rubycedar
2019-12-01 16:42:25 +08:00
为什么相比较而言大多数人都在黑 PHP ? PHP 不好吗?不是。PHP 开发者不积极维护吗?也不是。为什么网上的三个月速成就业班大多是针对于 PHP 而不是 Java 的?为什么 CTF 题里 Web 向的大多数都是和 PHP 相关的?不禁发人深省。🤔
pengwkgood
2019-12-01 17:01:36 +08:00
@rubycedar 严肃的编程本身确实不需要考虑非技术人员。但是有多场景不需要那么严肃的编程,比如,想通过编程解决一些重复劳动、或者想做些小工具,做这些事情的人很多没有足够的专业知识或者没有足够的时间来做,提供这样一个工具给他们,就能降低难度,方便他们做出他们想要工具。
pengwkgood
2019-12-01 17:06:35 +08:00
@rubycedar 语言的简单确实容易让很多人不受专业训练就能做,拉低从业人员水平。。。招黑
renmu
2019-12-01 18:00:35 +08:00
支持楼主,这样在公司可以快速做一些小工具作为 web 服务直接提供给同事,不要折腾去打包成 exe,希望楼主能添加更多的 demo
BingoXuan
2019-12-01 18:21:26 +08:00
@rubycedar
你有考虑一些其他专业人士吗?声学光学等方面的面向工业领域技术人员大多都用 LabVIEW 或者 MATLAB。对于他们来说,快速可用,可调试非常重要,直接在工作上使用 python 编写程序,其实是影响效率的。
ipwx
2019-12-01 18:39:00 +08:00
感觉是个伪命题,“非专业人士”和你想象的“非专业人士”可能不太一样。至少照着 demo 引入一个库,加个什么函数装饰器,然后运行一个什么 xxxserver xxxmodule:xxxfunc 这样的命令启动一个 API server 还是没啥难度的,并不需要 Web UI。
ipwx
2019-12-01 18:39:53 +08:00
你这东西要是给 AWS Lambda 之类的云服务器厂商用上也许还有点价值,至少给“非专业人士”免除了部署服务器的麻烦。
pengwkgood
2019-12-01 19:03:07 +08:00
@ipwx 提供一个 API server 确实很简单,但是一个简单的内部服务或者小工具要调 API 才能用,那就很麻烦了。
pengwkgood
2019-12-01 19:05:12 +08:00
@ipwx 嗯嗯,要是云函数有这个功能该多好啊!🤣做内部管理后台,写完云函数就有一个可用的了。
pengwkgood
2019-12-01 19:06:20 +08:00
@renmu 谢谢你的支持,还给我发了 PR。你说的场景就是这个工具想要解决的。
ClericPy
2019-12-01 21:02:35 +08:00
之前发现函数可以自省以及类型注解以后, 确实想过函数可以自动转 UI (web ui, gui, terminal ui), 前段时间用 inspect 和 pydantic 弄了个类似的 https://github.com/ClericPy/ask4args , 主要是为了体验下 inspect 的一些用法, 后来发现 Gooey 和 Wooey, 感觉白折腾 UI 方面的了, 只要做好函数自省和类型转换的框架就够了...
等真做完了发现, 并不太需要这玩意, 就当写着练手了...... 难怪 PM 总是因为一句"你不是真的需要"把需求砍了
shidenggui
2019-12-01 21:27:54 +08:00
感觉还不错,Google 有个类似的库,不过是将 function 变成 cli 的
pengwkgood
2019-12-01 23:36:16 +08:00
@shidenggui 😊,Google 的 https://github.com/google/python-fire

CLI 有两个问题:

- 表达能力不够:CLI 的输入基本只能以字符串为主(文件什么的也是字符串的形式),不够直观。输出的展示也是字符串为主,或者字符画,对输出做可视化支持成本很高。Web 在这方面优势很大,基本就是选择框架,对接数据结构即可。
- 不够易用:命令行需要在每个使用者的机器上都安装,懂命令行怎么使用,这要求使用者懂点技术。Web 只需网络和浏览器,这一点只要是网民都可以。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/624762

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX