推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
SystemLight
V2EX  ›  Python

有没有人觉得 Python Flask 写后端很难用?

  •  
  •   SystemLight ·
    SystemLight · Aug 23, 2021 · 9697 views
    This topic created in 1905 days ago, the information mentioned may be changed or developed.
    • 自我感觉 python 越用越难用,动态类型提示极其的不友好
    • flask 集成 sqlalchemy 想要返回 JSON 返回内容还需要通过 marshmallow 等把 python 对象转换
    • 如果想要使用登录管理集成 flask_login 等
    • 这样就会出现项目中存在多个模型定义文件
    • 再说 sqlalchemy 本身就挺复杂,然后类型提示大部分都没用,想不起来时候只能查文档,非常繁琐
    • 还有 flaks 本身导入通过一个全局 app 控制,这样进行项目分块时候极其不友好,有蓝图也一样,对比 dotnent 和 java 自识别,flask 需要手动注册就很麻烦了
    • 然后我总结一句就是,动态语言一时爽,过一段时间自己都不知道这个变量会产生什么结果类型
    66 replies  •  2021-09-11 16:59:25 +08:00
    wellsc
    wellsc
    Aug 23, 2021
    1
    2021 年了
    0d
    0d
    Aug 23, 2021 via Android
    2
    使用过一次后,就再也没用过了
    ytmsdy
    ytmsdy
    Aug 23, 2021❤️13
    3
    动态语言好比一辆 F1 赛车,一脚油门一踩就往前走,但是相应的如果技术不过硬,过弯和减速的时候容易出问题。
    老司机们都觉得非常香。
    新司机觉得这什么破车,居然不带 ABS,还没有倒挡!
    simple2025
    simple2025
    Aug 23, 2021
    4
    感觉还好吧, 手动注册还行吧, 手动注册好理解.
    simple2025
    simple2025
    Aug 23, 2021❤️1
    5
    关键 web 一般而言操作比较简单吧,一般的 crud, 基本不需要定义中间类,导致要了解的额外内容较少, 比较简单
    simple2025
    simple2025
    Aug 23, 2021
    6
    顺便说一局,我用的 tornado, flask 要用 gevent, 我菜我把握不了
    Mohanson
    Mohanson
    Aug 23, 2021❤️1
    7
    关于我是如何评价 py 这门语言的: 看我头像
    alexkkaa
    alexkkaa
    Aug 23, 2021 via Android❤️1
    8
    flask 就是用来写 hello world 的 用来写项目最后会改的不牛不马的。Django 是比较完善的
    sickoo
    sickoo
    Aug 23, 2021
    9
    推荐 fastapi,高性能异步框架,如果还不行请 fast 自己
    xmt328
    xmt328
    Aug 23, 2021❤️4
    10
    @ytmsdy 然后项目经理说这个项目你帮客户把乡下老母亲接过来,别人拖拉机 1 个小时就能来回,你 F1 的赛车手半个小时应该足够了吧
    steptodream
    steptodream
    Aug 23, 2021
    11
    合适的工具干合适的事
    jakehu
    jakehu
    Aug 23, 2021
    12
    sanic 还不错
    so1n
    so1n
    Aug 23, 2021
    13
    类型这个可以用 type hint
    so1n
    so1n
    Aug 23, 2021
    14
    @sickoo fastapi 是基于 starlette, 性能全靠自己的虚假宣传, 还不如 starlette. 宣传的性能是基于 uvicorn+uvloop+ojson+h11
    tabris17
    tabris17
    Aug 23, 2021
    15
    @jakehu sanic 还活跃吗?基础设施太少了,不知道现在如何了
    ytmsdy
    ytmsdy
    Aug 23, 2021
    16
    @xmt328 可以啊,让项目经理先把去向下的高速公路修好!
    Vegetable
    Vegetable
    Aug 23, 2021
    17
    Django yyds
    ila
    ila
    Aug 23, 2021
    18
    又不是不能用。。。



    其实你写多了,积累多了,自定义 model 基类和中间件,能够解决很多问题。
    jakehu
    jakehu
    Aug 23, 2021
    19
    @tabris17 flask 之前也是用过的,现在在用 sanic 写一个项目,感觉还可以给
    simple2025
    simple2025
    Aug 23, 2021
    20
    @Mohanson 我到觉得脚本语言里面 py,语法还好,虽然现在脚本里面 js 语法最好,但是好的是应该是 ts
    danc
    danc
    Aug 23, 2021
    21
    写惯了静态类型的,这种动态类型的我是真的 hold 不住了🤣。一开始写的时候其实还好,后面过了一段时间要改的话,尤其是范围稍微大一点,直接火葬场
    ynkkdev
    ynkkdev
    Aug 23, 2021
    22
    既然这么不喜欢 flask 的简陋,为啥不选 django 呢。

    ps:fastapi 不是比 flask 生态更差?不知道为什么这么多推荐的
    simple2025
    simple2025
    Aug 23, 2021
    23
    @youngce django 上手比 flask 难呀
    Latin
    Latin
    Aug 23, 2021
    24
    题主的目标就是引战么?
    RealLiuSha
    RealLiuSha
    Aug 23, 2021
    25
    首先这是一个引战帖

    然后我想说,flask 和 fastapi 压根就不是一类东西, 没有可比性

    至于你觉得 flask 写后端很难用, 大概率是你自己的问题
    kaka6
    kaka6
    Aug 23, 2021
    26
    flask 写后端挺好用的,简单便捷,好扩展
    SjwNo1
    SjwNo1
    Aug 23, 2021
    27
    求求你用 java 吧
    roundgis
    roundgis
    Aug 23, 2021 via Android
    28
    找一個好點的 ide

    例如 pycharm

    日子會好過些
    est
    est
    Aug 23, 2021
    29
    flask 本来就很难用。就是一个写 hello world 的脚手架
    CicadaLewis
    CicadaLewis
    Aug 23, 2021
    30
    type hint 了解一下
    lesismal
    lesismal
    Aug 23, 2021
    31
    golang,你值得拥有
    leon0318
    leon0318
    Aug 23, 2021 via iPhone
    32
    python 本身就很拉跨,和 flask 无关
    fatbear
    fatbear
    Aug 23, 2021❤️2
    33
    楼主吐槽主要集中在两点,一个是动态类型的问题,这不是 flask 的问题,是 python 的问题,现在 python3 有了类型注解,和 ide 集成的也很好,并不存在没有提示等问题。 第二,楼主一直觉得 sqlalchemy 难用,flask 比 django 就好用在每个组件都可以自由替换,你可以选择 peewee,序列为 json 只需要一句 query.dicts()。
    很多人去用其他语言的 xx 框架难用其实就是先入为主了,用其他语言的思想去看待另一门语言,python 的优势就在于快速开发,快速迭代,如果作为内部工具的后端服务,这两个优势是其他语言无可比拟的
    Kilerd
    Kilerd
    Aug 23, 2021 via iPhone❤️2
    34
    哪哪都能看到说 flask 和 fastapi 不是同一个东西的人,别人明明就想用 python 写个 API 。然后你就给讲到了什么封装,什么架构能力不对称。哎
    loading
    loading
    Aug 23, 2021
    35
    flask 基本就是用来学 hello world 的,复杂应用超级麻烦。
    letking
    letking
    Aug 23, 2021
    36
    楼主引战有一手,学习了。
    efaun
    efaun
    Aug 23, 2021
    37
    @Kilerd #34 一个东西看起来像鸭子,吃起来像鸭子,那它就是鸭子,你但凡正眼看下小丑,那你就输了
    no996
    no996
    Aug 23, 2021
    38
    我一个写了多年 java 的人,用 python 写 web 就真的很别扭,不管用 python 什么框架都一样,直到用上 PyCharm 才好过了一点点,python 的特点就是写那些几十行最多几百行的工具时候,非常爽和快
    Crixs
    Crixs
    Aug 24, 2021
    39
    目前也就 Django 无论文档还是生态完整
    4BVL25L90W260T9U
    4BVL25L90W260T9U
    Aug 24, 2021
    40
    我就不知道 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 非常像,学习成本很低。
    qW7bo2FbzbC0
    qW7bo2FbzbC0
    Aug 24, 2021
    41
    写 helloworld 的话,试试 bottle.py ?
    wangyzj
    wangyzj
    Aug 24, 2021
    42
    怎么说的
    python 什么都能干
    但有些工作有更好的选择
    比如写 web
    flask,django 各自有各自的优点和缺点
    虽然我更喜欢 flask,django 太臃肿
    但是做一个对性能要求不高的能用的需要团队协作的东西的话,django 是真的成熟完善
    qq976739120
    qq976739120
    Aug 24, 2021
    43
    flask 就是给老司机或者创业公司快速启动用的,提供个简单封装就够了.新手还是学学 spring 之类的比较好
    vanwtf
    vanwtf
    Aug 24, 2021
    44
    前期写一些管理系统的项目都是 django 一把搓,flask 写的项目大了就感觉用起来麻烦了,写点小接口还好,django yyds
    stach
    stach
    Aug 24, 2021
    45
    楼主的焦点更多的是 python 是一门 `动态` 语言, 如果要解决这个问题, 考虑 `静态` 语言会更好, 比如 Go 就很不错.

    另外, Flask 写后端是体验是非常好的, 觉得复杂的话, 可以不用 sqlalchemy, 直接用 PyMysql.
    我个人使用 Flask 本身的组件就很少, 主要是冲着 Python 这个语言优势去的, 再配上 gevent, 性能也够用.
    写过的业务也非常复杂, 可读性非常好, 如果用 Go 写就差一点了.

    个人认为, Flask 的优势在于它简单, 其实, 你可以改造成你想要的样子, 你习惯的姿势, 而改造没有啥成本.
    我可以像写 Go 后端 connection-per-goroutine 这样写 Python 后端 connection-per-gevent.
    这个 Tornado, Django 对于我个人而言就是难用.

    人生苦短, Python 真的不错, Flask 只是个工具.
    Mark24
    Mark24
    Aug 24, 2021
    47
    楼主没有领会动态语言的精髓。
    SystemLight
    SystemLight
    OP
    Aug 24, 2021
    48
    @yohole 没错小型的项目用起来非常爽,快速开发,但是项目复杂度一旦上来,自己写着写着都忘记这个变量什么类型的了,虽然有 typing 辅助,但是有些库太魔法了,导致类型都无法提示出来了。
    SystemLight
    SystemLight
    OP
    Aug 24, 2021
    49
    @SjwNo1 正在学习 spring 全家桶,从 tornado 到 flask,到现在不想用 python 都是泪,哈哈
    SystemLight
    SystemLight
    OP
    Aug 24, 2021
    50
    @ospider 听起来不错,可以尝试,SQLAlchemy 动态的简直了,.半天出不来提示,太不友好了
    jiayong2793
    jiayong2793
    Aug 24, 2021
    51
    @ytmsdy 你这个比如反了吧,动态语言数据没定义类型就拿来用,写完之后连自己都不知道是什么类型的
    meiyoumingzi6
    meiyoumingzi6
    Aug 24, 2021
    52
    别的还好, 就是觉得 current_app 非常蛋疼, 我只想在非请求周期内用个 setting
    lanlanye
    lanlanye
    Aug 24, 2021
    53
    最近写服务用 Golang,写业务用 Django,爽的一批
    molika
    molika
    Aug 25, 2021
    54
    别的不说 就说第一点 “自我感觉 python 越用越难用,动态类型提示极其的不友好” 自己写代码不随手 type hint 然后推导不出类型。。。怪 python 喽
    SystemLight
    SystemLight
    OP
    Aug 25, 2021
    55
    @molika 用一下 sqlalchemy 就知道了,第三库内置的实现非常动态,导致无法提示
    molika
    molika
    Aug 26, 2021 via iPhone
    56
    @SystemLight 合适的 orm 的确难找 自己 hack 写方法包 加泛型 能推出来 我都这么干 但是没办法
    allisone
    allisone
    Aug 26, 2021
    57
    用 django 一把梭
    flniu
    flniu
    Aug 26, 2021
    58
    @ytmsdy 哥们你说的应该是卡丁车。F1 有离合器、档位,肯定不是一踩油门就走,也有倒档,没有 TCS/ABS 倒是真的。
    flniu
    flniu
    Aug 26, 2021
    59
    我们的经验是:强制加类型提示,用 mypy 做类型检查(可以加到 pre-commit 或 /和 CI )。
    另外也在用 black 做代码格式化,用 pylint 或 flake8 做风格检查。
    这样综合起来,代码的可维护性会好很多。
    xmt328
    xmt328
    Aug 26, 2021
    60
    @molika 这个我就不能理解了,那干嘛不选个强类型语言
    williamZXS
    williamZXS
    Aug 26, 2021
    61
    @yohole 确实,我是先写的 python,后来才写 java,觉得 python 写个脚本很顺手,用来写项目会比较乱
    luckyc
    luckyc
    Aug 28, 2021❤️1
    62
    看到了这个`flask 集成 sqlalchemy 想要返回 JSON 返回内容还需要通过 marshmallow 等把 python 对象转换`
    我给你个方案 https://paste.ubuntu.org.cn/4544492
    molika
    molika
    Sep 1, 2021
    63
    @xmt328 typehint 可能是某些特殊场景或者人的需求 我目前不太需要这个
    可能后面需要考虑这方面了 会迁移过去 (我自己一个人的项目 hold 住 而且 hack 三方库也很方便
    tisswb
    tisswb
    Sep 2, 2021
    64
    sqlalchemy 很强大,我一般都是用 pony orm
    wuwukai007
    wuwukai007
    Sep 2, 2021
    65
    flask create_all 建表还要先手动导入模型类,一个项目几百张表,很离谱!
    SystemLight
    SystemLight
    OP
    Sep 11, 2021
    66
    @wuwukai007 有 flask-sqlacodegen 可以反向生成模型
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1091 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 122ms · UTC 18:19 · PVG 02:19 · LAX 10:19 · JFK 13:19
    ♥ Do have faith in what you're doing.