1 Outliver0 2021-11-03 11:24:14 +08:00 网站挂了吗,我访问不了 |
![]() | 2 janxin 2021-11-03 11:27:08 +08:00 直接怼在DB 上么... |
![]() | 5 loading 2021-11-03 11:49:06 +08:00 这和 orm 区别有多少,没看出来。 |
![]() | 6 qionnian 2021-11-03 12:05:35 +08:00 要 python3.10 啊 |
![]() | 7 HashV2 2021-11-03 12:20:31 +08:00 请问和 flask 、django 、tornado 这些 python web 框架相比优势在哪, 是性能更强还是更易用啊? |
![]() | 8 cheunghy OP @HashV2 区别就是一周工作量变成 2 小时。django 是类似 ror 的传统框架,代替以前的 php 和 java 的,现在看架构已经过时了。flask 和 fastapi 是 jsonclasses 可以选择使用的。 @jsonclass 就有比 pydantic 更完善的功能,@pymongo 就能获得 SQLAlchemy ORM 一样的功能,再 @api ,就拥有 CRUD ,支持各式关联查询。再 @authorized ,就可以直接获得登录功能,不需要写登录了。功能都是可选的,没有底层访问限制。 |
![]() | 10 feiandxs 2021-11-03 14:23:48 +08:00 好奇怪的用法。 这套东西我自己倒也有几个类似的,毕竟写几年业务下来谁都手头有一些封装,我也大量写 web 服务端,所以很多场景需求其实就那几个,我有好几种封装, 其中有一些也是用声明式的写法的。 我大概看了下你的文档,虽然不全,起码看起来挺专业,比很多项目要好太多。 但这个东西本身总给我一个奇怪的感觉,它很像一个扩展了的 orm 。 对我而言,这种东西更适合作为一个放在自己项目 \utils\ 下的一个工具,而不适合作为组织引导项目的框架。 |
![]() | 11 sudoy 2021-11-03 14:25:21 +08:00 支持一下,不过我个人还是习惯 flask 或者 django 这种服务端渲染的 |
12 crazypig14 2021-11-03 14:51:42 +08:00 文档里没找到做 authorized 的地方, 目前看最核心的地方好像就是 embeded 和 linked ,但这两个在 presenting/persistence/query 中的行为似乎文档不是很清楚,感觉需要自己踩坑, 支持一下,楼主加油 |
![]() | 13 4BVL25L90W260T9U 2021-11-03 14:54:08 +08:00 官网的代码配色改一下吧,你这个重点在装饰器,配色里装饰器确实灰色的。。 |
![]() | 15 cheunghy OP @crazypig14 谢谢认真阅读文档。 authorized 在 Guide 中的最后一个里面。 linked 那些,我刚检查了下,确实除了 API 文档中,Guide 中缺少相关内容。目前其他一些方面也会存在些缺少文档的情况,我们会整理总结,在新版本中把文档补充到位。 |
16 wliansheng 2021-11-03 15:02:16 +08:00 写法很简洁,看了一遍文档,取代视图层面的代码好像没看到在哪,感觉适合一些快速小一点的项目 |
![]() | 17 triangle111 2021-11-03 15:08:10 +08:00 支持一下,看样子确实省事很多,不过后端也需要校验前端传递过来的数据,这样还是避免不了一些业务函数的开发。 |
![]() | 18 learningman 2021-11-03 15:10:50 +08:00 这种声明式开发,写的时候没补全会难受死的。。。 |
![]() | 19 pengtdyd 2021-11-03 15:21:35 +08:00 说一个不是劝告的劝告,python 搞 web 是一个错误的方向,再努力都没用 |
20 lanlanye 2021-11-03 15:22:24 +08:00 大概看了一下,请问这个和 DRF 的 ModelViewSet 相比有什么优势? |
![]() | 21 cheunghy OP @triangle111 types.validate(types...) 管道校验呀,很多操作都有 API 的。 像我们自己用的 types.str.securepw.length(8,16),这就是校验密码的方式。 |
![]() | 22 cheunghy OP @learningman vscode 加 Pylance ,补全是完整的呀。 |
![]() | 23 cheunghy OP @wliansheng 视图是没有的,前后端分离的。 |
![]() | 24 cheunghy OP @lanlanye 是这个吗 https://www.django-rest-framework.org/api-guide/viewsets/ 刚看了下,这个要写 viewcontroller ,太多胶水代码了。 |
25 lanlanye 2021-11-03 15:56:53 +08:00 @cheunghy 是这个,在 Django 中定义好模型后只需要几行代码就可以创建一个 CRUD 的接口,同样几行可以添加简单的筛选搜索排序等定制功能,做数据接口的话并不需要写多少东西。 |
![]() | 26 cheunghy OP @lanlanye CRUD 和筛选搜索排序关联查询这些的话,用 JSONClasses 加五个字符:@api ,和一个换行符就可以了,并且可以嵌套多级查询。内在逻辑写在 types 管道中,又省下很多。 |
![]() | 27 so1n 2021-11-03 16:33:22 +08:00 pydantic 的结合 orm 版本? |
![]() | 28 cheunghy OP @so1n 是的,一部分功能这样比喻是很形象的。 在这里大概做一个比较 pydantic 初始化既验证,而 jsonclasses 是初始化后,允许你自由操作,调用 validate 才验证。 pydantic 仅强调验证,缺少数据流转换。 pydantic 不支持 orm 一直很伤,这个需求其实也很迫切。 pydantic 与 fastapi 的集成,解决一些问题,但也带来很多不够灵活的问题。这种集成仍不能避免复制粘贴 CRUD ,写过多胶水。 pydantic 的验证写起来麻烦,需要 @validate 加函数,而 jsonclasses 中,你可以用 types 管道写验证,也可以插 lambda 或函数进入管道。 pydantic 没有 graph 功能,就是多对象关联和数据库中的多对象分表集体写入。 |
![]() | 29 abersheeran 2021-11-03 16:55:31 +08:00 看了一下,开发一些 CRUD 的 API 服务确实不错,不过我没看到怎么定制化。假设我用你这个创建了一个 web application 了,我还想额外加一些处理器去其他 URL 的内容,怎么做? |
![]() | 30 cheunghy OP @abersheeran 没有限制功能的。app = create_fastapi_app()或 app = create_flask_app()之后,正常写 fastapi 或 flask 的 routes 就可以了。这种情况下,JSONClasses 全套 ORM 功能,以及核心包的 validate 等功能,都是可以使用的。相对于一些业务逻辑的话,比如说“领导批准”,其实可以通过 PATCH ( CRUD 中的 U )来实现,声明 types.onupdate(),触发关联的查询和其他的回调比如发出短信、发出邮件都可以的。 |
![]() | 31 abersheeran 2021-11-03 17:25:36 +08:00 @cheunghy flask 或者 fastapi 好像都是没有给指定一批路由增加中间件的功能,你这个框架的鉴权之类的功能是怎么实现的?会不会影响到我自定义的处理器? |
![]() | 32 cheunghy OP @abersheeran 你可以把新的 middleware 加在获得的 app 对象后面。flask 和 fastapi 两者的集成在框架内部 session 的实现是不同的。可以配置跳过不用的。 |
![]() | 33 sivacohan PRO 楼主能描述一下创造这个框架时候,希望使用的场景吗? 我看完文档觉得对于文档存储类使用起来比较方便。 对统计类(类 ERP 、CRM )这类数据好像没有额外的加持,同时因为绑定了 mongo ,对事务类支持可能也有风险。 |
![]() | 34 cheunghy OP @sivacohan 没有绑定 MongoDB ,只是还没支持 SQL 。支持 SQL 后,API 用法不变。 目前 ORM 功能是完整的,在 CRUD 方面,还没有思考统计图表等功能,如果是统计图表,需要手动写 routes 和 ORM 查询。会先收集统计图表的需求类型,以后会构思这方面的声明式写法。 事务的话,mongoDB 新版本有 transaction ,应该没什么问题吧。 |
![]() | 35 demonlin 2021-11-04 00:05:28 +08:00 建议: 官网以及文档加入国际化 |
![]() | 37 demonlin 2021-11-04 17:56:36 +08:00 @cheunghy 这个首先需要文档和官网的 github 仓库有集成国际化的方案,并且通过参与翻译的方式,而不是所有包含文字的文件都复制一份翻译,在集成后可选择如 https://www.transifex.com/home/ 的方式进行文案翻译 |
![]() | 39 llsquaer 2021-11-13 17:54:13 +08:00 国内开源的通病,第一步国际化...才从知乎激烈讨论过来,所以一看就联想到了.莫怪 |