Python Web API 后端终极开发框架 JSONClasses

2021-11-03 11:17:50 +08:00
 cheunghy
Python 在很多领域有很强大的功能,这些框架往往使用简单,功能强大,可操作性强。然而在 web 领域有所欠缺。

纵观整个后台开发,比起前端大火大热的 React ,SwiftUI ,Jetpack Compose ,前端已经迈入了声明代替编写过程的时代,而后端还仍然滞后。

所以,考虑到这两个因素,我带领我司研发了声明式的 Python 后端开发框架 JSONClasses ,把最新的理念和高效带给 Python 社区。

JSONClasses 是底层框架,你可以用其完成任何数据转换验证,ORM 操作和 CRUD 功能。他的功能却像高层框架:支持权限、多用户登录,关联关系,增删改查,筛选查询排序。它是声明式后台开发,绝对不是低码无码开发。虽然后台变成可以只有 1 个文件,docker 直接部署,但性质不同。

教程文章
https://medium.com/@victor.teo/python-web-api-development-with-jsonclasses-67f618eaedc6

官方网站
https://www.jsonclasses.com

官方文档
https://docs.jsonclasses.com

Github
https://github.com/fillmula/jsonclasses

示例代码 (数据验证,计算型字段,CRUD ,数据库操作)
```python
@api
@pymongo
@jsonclass
class Article:
id: str = types.readonly.str.primary.mongoid.required
title: str
content: str
words: int = types.int.getter(types.this.fval('content').split(" ").len)
published: bool = False
created_at: datetime = types.readonly.datetime.tscreated.required
updated_at: datetime = types.readonly.datetime.tsupdated.required
```
4622 次点击
所在节点    Python
41 条回复
Outliver0
2021-11-03 11:24:14 +08:00
网站挂了吗,我访问不了
janxin
2021-11-03 11:27:08 +08:00
直接怼在 DB 上么...
cheunghy
2021-11-03 11:46:43 +08:00
@Outliver0 你要科学访问
cheunghy
2021-11-03 11:47:25 +08:00
@janxin 不是的,含有 ORM
loading
2021-11-03 11:49:06 +08:00
这和 orm 区别有多少,没看出来。
qionnian
2021-11-03 12:05:35 +08:00
要 python3.10 啊
HashV2
2021-11-03 12:20:31 +08:00
请问和 flask 、django 、tornado 这些 python web 框架相比优势在哪, 是性能更强还是更易用啊?
cheunghy
2021-11-03 12:36:52 +08:00
@HashV2 区别就是一周工作量变成 2 小时。django 是类似 ror 的传统框架,代替以前的 php 和 java 的,现在看架构已经过时了。flask 和 fastapi 是 jsonclasses 可以选择使用的。 @jsonclass 就有比 pydantic 更完善的功能,@pymongo 就能获得 SQLAlchemy ORM 一样的功能,再 @api ,就拥有 CRUD ,支持各式关联查询。再 @authorized ,就可以直接获得登录功能,不需要写登录了。功能都是可选的,没有底层访问限制。
Outliver0
2021-11-03 14:04:06 +08:00
@cheunghy 已经科学上网了 不科学上网本站都访问不了
feiandxs
2021-11-03 14:23:48 +08:00
好奇怪的用法。

这套东西我自己倒也有几个类似的,毕竟写几年业务下来谁都手头有一些封装,我也大量写 web 服务端,所以很多场景需求其实就那几个,我有好几种封装, 其中有一些也是用声明式的写法的。

我大概看了下你的文档,虽然不全,起码看起来挺专业,比很多项目要好太多。
但这个东西本身总给我一个奇怪的感觉,它很像一个扩展了的 orm 。

对我而言,这种东西更适合作为一个放在自己项目 \utils\ 下的一个工具,而不适合作为组织引导项目的框架。
sudoy
2021-11-03 14:25:21 +08:00
支持一下,不过我个人还是习惯 flask 或者 django 这种服务端渲染的
crazypig14
2021-11-03 14:51:42 +08:00
文档里没找到做 authorized 的地方,
目前看最核心的地方好像就是 embeded 和 linked ,但这两个在 presenting/persistence/query 中的行为似乎文档不是很清楚,感觉需要自己踩坑,
支持一下,楼主加油
ospider
2021-11-03 14:54:08 +08:00
官网的代码配色改一下吧,你这个重点在装饰器,配色里装饰器确实灰色的。。
cheunghy
2021-11-03 14:55:11 +08:00
@ospider 我们正在修改,等设计师把图做好,会整体更新官网。
cheunghy
2021-11-03 14:57:51 +08:00
@crazypig14 谢谢认真阅读文档。
authorized 在 Guide 中的最后一个里面。
linked 那些,我刚检查了下,确实除了 API 文档中,Guide 中缺少相关内容。目前其他一些方面也会存在些缺少文档的情况,我们会整理总结,在新版本中把文档补充到位。
wliansheng
2021-11-03 15:02:16 +08:00
写法很简洁,看了一遍文档,取代视图层面的代码好像没看到在哪,感觉适合一些快速小一点的项目
triangle111
2021-11-03 15:08:10 +08:00
支持一下,看样子确实省事很多,不过后端也需要校验前端传递过来的数据,这样还是避免不了一些业务函数的开发。
learningman
2021-11-03 15:10:50 +08:00
这种声明式开发,写的时候没补全会难受死的。。。
pengtdyd
2021-11-03 15:21:35 +08:00
说一个不是劝告的劝告,python 搞 web 是一个错误的方向,再努力都没用
lanlanye
2021-11-03 15:22:24 +08:00
大概看了一下,请问这个和 DRF 的 ModelViewSet 相比有什么优势?

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

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

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

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

© 2021 V2EX