给大家介绍一下我的业余项目: 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
会生成下面的界面:
1
ipwx 2019-12-01 13:11:50 +08:00 via Android 2
泼一桶冷水:fastapi 已经很完善了
|
2
ila 2019-12-01 13:43:06 +08:00 via Android 1
swagger
|
3
pengwkgood OP @ipwx 我想解决的不是 fastapi 想要解决的问题。fastapi 结合 type annotation 出 API 方便、专业,加上 swagger 调试起来很舒服,但是不是准备给不懂开发的人用的。
touch-callable 希望做到的是能生成一个简易但是非技术人员也能使用的 Web 界面,不需要使用这在界面上费心。只需要写好 function 加上 annotation 就好了。 |
4
pengwkgood OP @ila swagger 太专业了,不是给非技术人员使用的。
|
5
rubycedar 2019-12-01 16:23:35 +08:00 via iPhone
py 迟早变成 php
|
6
pengwkgood OP @rubycedar 这一起黑了,为什么?
|
7
rubycedar 2019-12-01 16:30:06 +08:00 via iPhone 3
@pengwkgood 编程就是程序员经过专业学习才能做的事情,为什么要考虑非技术人员?
|
8
rubycedar 2019-12-01 16:42:25 +08:00 via iPhone 1
为什么相比较而言大多数人都在黑 PHP ? PHP 不好吗?不是。PHP 开发者不积极维护吗?也不是。为什么网上的三个月速成就业班大多是针对于 PHP 而不是 Java 的?为什么 CTF 题里 Web 向的大多数都是和 PHP 相关的?不禁发人深省。🤔
|
9
pengwkgood OP @rubycedar 严肃的编程本身确实不需要考虑非技术人员。但是有多场景不需要那么严肃的编程,比如,想通过编程解决一些重复劳动、或者想做些小工具,做这些事情的人很多没有足够的专业知识或者没有足够的时间来做,提供这样一个工具给他们,就能降低难度,方便他们做出他们想要工具。
|
10
pengwkgood OP @rubycedar 语言的简单确实容易让很多人不受专业训练就能做,拉低从业人员水平。。。招黑
|
11
renmu 2019-12-01 18:00:35 +08:00 via Android 1
支持楼主,这样在公司可以快速做一些小工具作为 web 服务直接提供给同事,不要折腾去打包成 exe,希望楼主能添加更多的 demo
|
12
BingoXuan 2019-12-01 18:21:26 +08:00 via Android 1
@rubycedar
你有考虑一些其他专业人士吗?声学光学等方面的面向工业领域技术人员大多都用 LabVIEW 或者 MATLAB。对于他们来说,快速可用,可调试非常重要,直接在工作上使用 python 编写程序,其实是影响效率的。 |
13
ipwx 2019-12-01 18:39:00 +08:00 1
感觉是个伪命题,“非专业人士”和你想象的“非专业人士”可能不太一样。至少照着 demo 引入一个库,加个什么函数装饰器,然后运行一个什么 xxxserver xxxmodule:xxxfunc 这样的命令启动一个 API server 还是没啥难度的,并不需要 Web UI。
|
14
ipwx 2019-12-01 18:39:53 +08:00 1
你这东西要是给 AWS Lambda 之类的云服务器厂商用上也许还有点价值,至少给“非专业人士”免除了部署服务器的麻烦。
|
15
pengwkgood OP @ipwx 提供一个 API server 确实很简单,但是一个简单的内部服务或者小工具要调 API 才能用,那就很麻烦了。
|
16
pengwkgood OP @ipwx 嗯嗯,要是云函数有这个功能该多好啊!🤣做内部管理后台,写完云函数就有一个可用的了。
|
17
pengwkgood OP @renmu 谢谢你的支持,还给我发了 PR。你说的场景就是这个工具想要解决的。
|
18
ClericPy 2019-12-01 21:02:35 +08:00 2
之前发现函数可以自省以及类型注解以后, 确实想过函数可以自动转 UI (web ui, gui, terminal ui), 前段时间用 inspect 和 pydantic 弄了个类似的 https://github.com/ClericPy/ask4args , 主要是为了体验下 inspect 的一些用法, 后来发现 Gooey 和 Wooey, 感觉白折腾 UI 方面的了, 只要做好函数自省和类型转换的框架就够了...
等真做完了发现, 并不太需要这玩意, 就当写着练手了...... 难怪 PM 总是因为一句"你不是真的需要"把需求砍了 |
19
shidenggui 2019-12-01 21:27:54 +08:00 1
感觉还不错,Google 有个类似的库,不过是将 function 变成 cli 的
|
20
pengwkgood OP @shidenggui 😊,Google 的 https://github.com/google/python-fire
CLI 有两个问题: - 表达能力不够:CLI 的输入基本只能以字符串为主(文件什么的也是字符串的形式),不够直观。输出的展示也是字符串为主,或者字符画,对输出做可视化支持成本很高。Web 在这方面优势很大,基本就是选择框架,对接数据结构即可。 - 不够易用:命令行需要在每个使用者的机器上都安装,懂命令行怎么使用,这要求使用者懂点技术。Web 只需网络和浏览器,这一点只要是网民都可以。 |
21
cydian 2019-12-02 01:37:59 +08:00 via Android 1
我赞成易用的 web
支持楼主。 |
22
rubycedar 2019-12-02 09:11:00 +08:00 via iPhone 1
@BingoXuan 有道理🤔 不过还是这些非专业人士不小心写点漏洞 再不小心放在公网上 就成安全隐患了哈哈哈
|
23
pengwkgood OP @rubycedar 安全确实蛮重要的,我建一个 issue 跟进。😝
|
24
pengwkgood OP @cydian 谢谢!你目前有使用这种工具的需求吗?
|
25
pengwkgood OP @ClericPy 我觉得是这些工具都不是足够好用,所以大家没用起来。等输入输出支持的丰富些,做几个例子,大家能很直观感受到这种工具的价值,可能就会用起来了。
|
26
pengwkgood OP @BingoXuan 能具体说说他们的需求吗?
|
27
pengwkgood OP @ClericPy 嗯,我应该把这几个工具的异同都列出来放在 Readme 里。
|
28
BingoXuan 2019-12-02 21:11:41 +08:00
@pengwkgood
现阶段来说完成度已经非常高了,如果做成 jupyter notebook 类似就最好。分割成不同的块,允许用户根据需求执行不同的块。不过 jupyter 是承载代码,我觉得你可以加一个 table 控件用于承载函数的信息。最好能调用一些内置函数,如 sleep。 |
29
ClericPy 2019-12-02 21:13:41 +08:00
@pengwkgood #27 Just do "IT". 反正闲着也是闲着, 我也是为了避免长时间不敲代码手生, 才搞那么个玩意, 当时问 V2 有没有现成的轮子, 没问到, 就自己撸了试试, 看你的项目和我的时间还挺接近哈哈, 不过做到 web UI 的时候, 实在感觉无聊, 就丢那了, 实际上做到函数自省成一个 kwargs, 然后做好类型自动转换, 剩下的直接转命令行的 argparse 兼容格式, 就能直接套进 Gooey 和 Wooey
这东西自己搞感觉搞不太起来, 搞起来也就自己在用, 不像 google 的 fire 和 linkedin 的 shiv, 那是他们内部确实大范围解决过问题的 溜了溜了 |