3
有没有人觉得 Python Flask 写后端很难用?
source link: https://www.v2ex.com/t/797493
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
- 自我感觉 python 越用越难用,动态类型提示极其的不友好
- flask 集成 sqlalchemy 想要返回 JSON 返回内容还需要通过 marshmallow 等把 python 对象转换
- 如果想要使用登录管理集成 flask_login 等
- 这样就会出现项目中存在多个模型定义文件
- 再说 sqlalchemy 本身就挺复杂,然后类型提示大部分都没用,想不起来时候只能查文档,非常繁琐
- 还有 flaks 本身导入通过一个全局 app 控制,这样进行项目分块时候极其不友好,有蓝图也一样,对比 dotnent 和 java 自识别,flask 需要手动注册就很麻烦了
- 然后我总结一句就是,动态语言一时爽,过一段时间自己都不知道这个变量会产生什么结果类型
59 条回复 • 2021-08-26 11:03:26 +08:00
ytmsdy 2 天前 11
动态语言好比一辆 F1 赛车,一脚油门一踩就往前走,但是相应的如果技术不过硬,过弯和减速的时候容易出问题。
老司机们都觉得非常香。
新司机觉得这什么破车,居然不带 ABS,还没有倒挡!
老司机们都觉得非常香。
新司机觉得这什么破车,居然不带 ABS,还没有倒挡!
so1n 2 天前
@sickoo fastapi 是基于 starlette, 性能全靠自己的虚假宣传, 还不如 starlette. 宣传的性能是基于 uvicorn+uvloop+ojson+h11
fatbear 2 天前 2
楼主吐槽主要集中在两点,一个是动态类型的问题,这不是 flask 的问题,是 python 的问题,现在 python3 有了类型注解,和 ide 集成的也很好,并不存在没有提示等问题。 第二,楼主一直觉得 sqlalchemy 难用,flask 比 django 就好用在每个组件都可以自由替换,你可以选择 peewee,序列为 json 只需要一句 query.dicts()。
很多人去用其他语言的 xx 框架难用其实就是先入为主了,用其他语言的思想去看待另一门语言,python 的优势就在于快速开发,快速迭代,如果作为内部工具的后端服务,这两个优势是其他语言无可比拟的
很多人去用其他语言的 xx 框架难用其实就是先入为主了,用其他语言的思想去看待另一门语言,python 的优势就在于快速开发,快速迭代,如果作为内部工具的后端服务,这两个优势是其他语言无可比拟的
Kilerd 2 天前 via iPhone 2
哪哪都能看到说 flask 和 fastapi 不是同一个东西的人,别人明明就想用 python 写个 API 。然后你就给讲到了什么封装,什么架构能力不对称。哎
yohole 2 天前
我一个写了多年 java 的人,用 python 写 web 就真的很别扭,不管用 python 什么框架都一样,直到用上 PyCharm 才好过了一点点,python 的特点就是写那些几十行最多几百行的工具时候,非常爽和快
ospider 2 天前
我就不知道 flask 社区对 fastapi 咋就这么大的敌意?看来是真的戳到痛处了? FastAPI 人家大大方方的在主页写着基于 starlette 和 pydantic,咋就让你们你说的好像是偷源码一样了?人家 starlette 开源不就是为了让别人复用么?
楼主说的这几点,FastAPI 可以解决不少,建议尝试一下:
1. FastAPI 基于 Pydantic,强制你把参数都加上 type hint,一定程度上缓解了动态类型的问题。
2. FastAPI 中使用 Pydantic 定义参数,SQLAlchemy 定义数据库模型,个人使用下来感觉还是比较顺畅的。出参入参和模型中的字段还是有差异的,区别开有意义。不过 Pydantic 有 ORM mode,也可以直接读取 SQLAlchemy model 。
3. FastAPI 有强大的依赖注入系统,像是登录这种操作,直接写个几行的依赖就好了。社区有 fastapi_user/login 这种插件,但是我觉得是脱裤子放屁。官方文档就有详尽的实现 oauth2 的教程。
4. SQLAlchemy 的类型提示有时候真是无解……太动态了。
5. FastAPI 也是全局一个 app/router,然后其他的 router 注册上去。。不过最后在自动生成的 swagger 文档里是统一的
总之,如果尝试写前后端分离的 SPA 的话,建议试一下 FastAPI,毕竟刚用起来的 Flask 非常像,学习成本很低。
楼主说的这几点,FastAPI 可以解决不少,建议尝试一下:
1. FastAPI 基于 Pydantic,强制你把参数都加上 type hint,一定程度上缓解了动态类型的问题。
2. FastAPI 中使用 Pydantic 定义参数,SQLAlchemy 定义数据库模型,个人使用下来感觉还是比较顺畅的。出参入参和模型中的字段还是有差异的,区别开有意义。不过 Pydantic 有 ORM mode,也可以直接读取 SQLAlchemy model 。
3. FastAPI 有强大的依赖注入系统,像是登录这种操作,直接写个几行的依赖就好了。社区有 fastapi_user/login 这种插件,但是我觉得是脱裤子放屁。官方文档就有详尽的实现 oauth2 的教程。
4. SQLAlchemy 的类型提示有时候真是无解……太动态了。
5. FastAPI 也是全局一个 app/router,然后其他的 router 注册上去。。不过最后在自动生成的 swagger 文档里是统一的
总之,如果尝试写前后端分离的 SPA 的话,建议试一下 FastAPI,毕竟刚用起来的 Flask 非常像,学习成本很低。
wangyzj 2 天前
怎么说的
python 什么都能干
但有些工作有更好的选择
比如写 web
flask,django 各自有各自的优点和缺点
虽然我更喜欢 flask,django 太臃肿
但是做一个对性能要求不高的能用的需要团队协作的东西的话,django 是真的成熟完善
python 什么都能干
但有些工作有更好的选择
比如写 web
flask,django 各自有各自的优点和缺点
虽然我更喜欢 flask,django 太臃肿
但是做一个对性能要求不高的能用的需要团队协作的东西的话,django 是真的成熟完善
stach 2 天前
楼主的焦点更多的是 python 是一门 `动态` 语言, 如果要解决这个问题, 考虑 `静态` 语言会更好, 比如 Go 就很不错.
另外, Flask 写后端是体验是非常好的, 觉得复杂的话, 可以不用 sqlalchemy, 直接用 PyMysql.
我个人使用 Flask 本身的组件就很少, 主要是冲着 Python 这个语言优势去的, 再配上 gevent, 性能也够用.
写过的业务也非常复杂, 可读性非常好, 如果用 Go 写就差一点了.
个人认为, Flask 的优势在于它简单, 其实, 你可以改造成你想要的样子, 你习惯的姿势, 而改造没有啥成本.
我可以像写 Go 后端 connection-per-goroutine 这样写 Python 后端 connection-per-gevent.
这个 Tornado, Django 对于我个人而言就是难用.
人生苦短, Python 真的不错, Flask 只是个工具.
另外, Flask 写后端是体验是非常好的, 觉得复杂的话, 可以不用 sqlalchemy, 直接用 PyMysql.
我个人使用 Flask 本身的组件就很少, 主要是冲着 Python 这个语言优势去的, 再配上 gevent, 性能也够用.
写过的业务也非常复杂, 可读性非常好, 如果用 Go 写就差一点了.
个人认为, Flask 的优势在于它简单, 其实, 你可以改造成你想要的样子, 你习惯的姿势, 而改造没有啥成本.
我可以像写 Go 后端 connection-per-goroutine 这样写 Python 后端 connection-per-gevent.
这个 Tornado, Django 对于我个人而言就是难用.
人生苦短, Python 真的不错, Flask 只是个工具.
SystemLight 2 天前
@yohole 没错小型的项目用起来非常爽,快速开发,但是项目复杂度一旦上来,自己写着写着都忘记这个变量什么类型的了,虽然有 typing 辅助,但是有些库太魔法了,导致类型都无法提示出来了。
flniu 3 小时 52 分钟前
我们的经验是:强制加类型提示,用 mypy 做类型检查(可以加到 pre-commit 或 /和 CI )。
另外也在用 black 做代码格式化,用 pylint 或 flake8 做风格检查。
这样综合起来,代码的可维护性会好很多。
另外也在用 black 做代码格式化,用 pylint 或 flake8 做风格检查。
这样综合起来,代码的可维护性会好很多。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK