[想法] 给 Django 增加 Pydantic 支持

2020-08-08 16:56:23 +08:00
 abersheeran

先说我的观点,FastAPI 是拼接怪,在我心里跟 flask 这个玩具的地位差不多。可以用,但是没必要。

Django 在我心里仍然是目前最好的 Python web 框架。但是 Django rest framework 我也觉得是个狗屎,我两年前试图用不成熟的想法挑战 drf 的地位,最后发现自己也只能是再创造一个 drf 。

pydantic 的流行是一个契机,我自己的 web 框架 index.py 设计本身与 pydantic 就是弱耦合的,完全可以把这部分经验挪到 Django 上。成品的使用方法可能会类似于 index.py/openapi

就是不知道大家的看法如何?是否值得去做?

如果支持的人多,我会把接下来几周的周末时间拿来完成这个项目。

5126 次点击
所在节点    Python
38 条回复
wuwukai007
2020-08-08 17:17:27 +08:00
确实,拼接怪有画面了
cz5424
2020-08-08 18:14:00 +08:00
说 Flask 是玩具就过分了
Aeoluze
2020-08-08 22:14:56 +08:00
妙啊,有点期待
lithbitren
2020-08-08 23:19:31 +08:00
你问我支不支持,那我肯定是支持的
guyskk0x0
2020-08-09 00:55:32 +08:00
不知楼主有没有看过 https://github.com/guyskk/validr,我把它和 drf 一起用还挺爽的。pydantic 给我感觉的是太弱,局限于 type hits 了,虽然我的项目也没几个 star 。

感觉你写一个能兼容现有生态且性能更好的路由,更容易持续做下去,虽然 Tom 不喜欢但你 show the code 他说不定就改变看法了。
guyskk0x0
2020-08-09 00:59:52 +08:00
另外我记得 werkzeug 里是把所有路由拼成一个大正则,匹配效率很高的。
Jat001
2020-08-09 01:09:01 +08:00
flask 是玩具还行,原来过去几年我一直在玩玩具
Trim21
2020-08-09 01:10:23 +08:00
不知道能不能把 fastapi 这部分挪出来,单独做成一个库,这样底层到底是什么框架就无所谓了
abersheeran
2020-08-09 01:16:03 +08:00
@Trim21 不可能。路由是每个 web 框架的根基,除了 fastapi 这种拼接怪以外,基本都是自己写的。做不到适配。而且 fastapi 在这部分根本没做什么,全都是 pydantic 的功劳。
Trim21
2020-08-09 01:18:55 +08:00
@abersheeran #9 我的意思 handler 的 type hint 和依赖注入这部分,底层的路由还用各个框架自己的东西
abersheeran
2020-08-09 01:23:45 +08:00
@guyskk0x0 这个库看起来不错,不过 pydantic 的主要功能不在校验上,而是可以针对大量不同格式的数据模型生成 OpenAPI 文档。如果只是校验功能,我写 Django 的时候会选择直接使用它原生的 Form 。
Trim21
2020-08-09 01:24:18 +08:00
abersheeran
2020-08-09 01:29:52 +08:00
@guyskk0x0 所以为什么我还得委屈求全,求着别人用我的代码?我做开源就是跪不下去。Tom 的 starlette 就像是艺术品,我尊重他的代码且贡献了一些优化,但我同样看得起我自己的成果。他不愿意,那就算了。并且这个并不是他一个人不愿意,encode 的其他成员也不愿意。
abersheeran
2020-08-09 01:32:19 +08:00
@Trim21 那就没办法生成文档,功能等于少一大半。
Trim21
2020-08-09 01:36:20 +08:00
@abersheeran #14 文档可以赋值给 handler 的一个属性,然后再针对每一个框架提供一个方法来把所有的路由和 handler 来处理一下,正好可以针对不同的框架要用到不同的路由语法
abersheeran
2020-08-09 01:41:19 +08:00
@Trim21 想法不错。不过 Python 的 web 框架,除了 Django 我就只愿意用我自己的 index.py
Trim21
2020-08-09 01:46:53 +08:00
@abersheeran #16 正好这样支持两个框架,别人还能 pr 别的框架的支持
so1n
2020-08-09 02:08:00 +08:00
我之前每个框架都要写一个校验装饰器,所以也产生了写一个所有框架都可以用的类似于 fastapi 参数校验和转换的库, 前段时间开始动手了,想着可以套在大部分的 python web 框架, 前期通过 starlette 和 flask 框架来验证功能,不过还不可以用于生产环境,目前只做了接口的校验和检测功能
https://github.com/so1n/pait
abersheeran
2020-08-09 02:33:13 +08:00
@so1n 这个不错,不过使用体验可以再优化优化,有些冗余。

@so1n @Trim21 两位,我们创建一个组织一起来做这个吧。支持多种框架的参数校验和自动 OpenAPI 文档生成,感觉比较有意思。
Trim21
2020-08-09 03:14:30 +08:00
@abersheeran #19 我感觉行(

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

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

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

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

© 2021 V2EX