首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
Livid
V2EX  ›  Python

关于 Flask 项目的代码文件组织

  •  
  •   Livid · 76 天前 via iPhone · 5566 次点击
    这是一个创建于 76 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是否有什么大型的基于 Flask 框架的开源项目,想学习一下他们是如何组织代码的。
    47 回复  |  直到 2020-01-20 23:33:06 +08:00
    wph95
        1
    wph95   76 天前 via iPad
    Airflow 当初看过一些 感觉还可以
    // 要是问 Django 就好了 有好几个写的很优雅的大项目( sentry taigo)非常值得推荐
    Livid
        2
    Livid   V2EX Moderator   76 天前
    @wph95 是啊。我就在想有没有类似 Sentry 这样规模的值得学习的项目。
    Livid
        3
    Livid   V2EX Moderator   75 天前
    官方文档其实有提到一个 pattern:

    http://flask.palletsprojects.com/en/1.1.x/patterns/packages/
    memorybox
        4
    memorybox   75 天前   ♥ 3
    一个提供 restapi 的示例,组织很简洁,有参考价值:

    https://github.com/frol/flask-restplus-server-example
    haoji
        5
    haoji   75 天前 via Android
    @wph95 别说一半不说了嘛,推荐一下?
    phy25
        6
    phy25   75 天前 via Android
    @haoji #5 括号里的不是吗。
    haoji
        8
    haoji   75 天前 via Android
    @phy25 😂我的错,刚睡醒眼睛没睁开。🤐
    wmc
        9
    wmc   75 天前   ♥ 1
    想起之前实习的时候读到的一篇文章,用一个很 trick 的方法来解决循环引用…… 这个设计很巧,实际上把所有的模块都做成了 init_app

    https://lepture.com/en/2018/structure-of-a-flask-project
    Latin
        10
    Latin   75 天前   ♥ 1
    banxi1988
        11
    banxi1988   75 天前   ♥ 1
    嗯, 搭车问一下,现在用 FastAPI 的人多吗? 一个类似 Flask 的框架.
    但是比 Flask 更现代:
    1. Python 3.6+
    2. 完善的类型声明
    3. 异步 async await 支持
    4. 自带 Swagger (OpenApi)
    Allianzcortex
        12
    Allianzcortex   75 天前   ♥ 2
    @wmc 提到的 @lepture 曾经写过一个论坛 june,对里面装饰器来控制权限的用法至今还印象深刻,当然毕竟他就是 pocoo 组(Flask 核心开发)里的一员

    cz5424
        13
    cz5424   75 天前 via iPhone   ♥ 1
    Orenoid
        14
    Orenoid   75 天前   ♥ 1
    我是参照了这两个项目,可能都谈不上大型。
    狗书的 flasky,也就是 7 楼提的那个:
    https://github.com/miguelgrinberg/flasky/tree/60252375f8660d034680725db24301c594ce69e4
    flask 官方 repo 里的 tutorial:
    https://github.com/pallets/flask/tree/master/examples/tutorial
    两者用的都是类似的项目结构,flasky 把 turorial 里的一些单文件扩展成了包,但基本架构没太大差别。
    Orenoid
        15
    Orenoid   75 天前
    @Orenoid #14 更正,flasky 跟 7 楼的不是同一个项目,只是同一个作者
    ebingtel
        16
    ebingtel   75 天前
    怎么开心怎么来,都是微服务了……一个 web 项目也可以 install 其他的子项目作为集成
    sujin190
        17
    sujin190   75 天前
    676529483
        18
    676529483   75 天前
    感觉 flask 一直都是关注度高,但开源的大型项目找不到,相反 django 就很多了。根据面试的情况归纳,基本小企业跟风用 flask 的多一些,做的也比较小型
    cpj
        19
    cpj   75 天前
    老帖子里有提到过,并且我实践了 lepture 的那篇文章 ( https://lepture.com/en/2018/structure-of-a-flask-project ),感觉比较舒服
    ClericPy
        20
    ClericPy   75 天前
    早年间用的 https://exploreflask.com/en/latest/organizing.html, 虽然也有中文版教程
    不过楼主这种站长经验丰富的应该不需要这个...

    用了两年 flask, 我就跳 asgi 了, starlette / fastapi 真香, falcon 也真快
    est
        21
    est   75 天前   ♥ 5
    flask 有很多 anti-pattern。

    网上抄的装饰器一时爽,单元测试火葬场。
    全局 context 变量一时爽,堆栈弹错火葬场。
    flask API 输出一时爽,代码组织火葬场。
    简单功能一时爽,flask-* 插件火葬场
    flask-*插件一时爽,遇到 bug 兼容问题火葬场
    Hopetree
        22
    Hopetree   75 天前
    把所有的 APP 都使用 init_app ()加载,我觉得这就是 flask 的组织架构了
    lolizeppelin
        23
    lolizeppelin   75 天前
    想看大型的就不要把关注点放在 web 框架上...

    来来来 openstack 走起
    GoLand
        24
    GoLand   75 天前
    https://github.com/Robpol86/Flask-Large-Application-Example

    有个这个,很不错,一直在用。
    gjquoiai
        25
    gjquoiai   75 天前
    XIVN1987
        26
    XIVN1987   75 天前
    @est
    看来还是 django 靠谱啊,,
    hmxxmh
        27
    hmxxmh   75 天前
    @banxi1988 类型注解只能声明一些常用的数据类型吧,如果是 file 类型和 QuerySet 对象应该怎么声明
    est
        28
    est   75 天前   ♥ 2
    @XIVN1987 烧火棍有烧火棍的用处,航母有航母的战斗力。要把烧火棍变成航母,得有规划和变通能力。要把航母当烧火棍使,得会法术和本事。
    skenan
        29
    skenan   75 天前
    现在用 flask 一般是写 api 吧,比较喜欢这个 repo 里的组织方式: https://github.com/openspug/spug
    Trim21
        30
    Trim21   75 天前 via iPhone
    fastapi 真香
    ampedee
        31
    ampedee   75 天前 via Android
    @banxi1988 FastAPI 真香
    Trim21
        32
    Trim21   75 天前 via Android
    @hmxxmh 不完全是用的类型注解,还可以用函数参数默认值来声明。上传文件是通过参数默认值声明的。
    anaf
        33
    anaf   75 天前
    cookiecutter-flask 一直以来用这个
    Aether
        34
    Aether   75 天前
    @est 之前用过一段时间 flask,现在转到 Go 下面,最开始很痛苦,现在觉得没有环境问题啥的各种爽……
    est
        35
    est   75 天前
    @Aether 环境问题是指 py 版本和依赖包么?那的确很蛋痛。

    不过 go 一般都配合 docker 运行了。反而也麻烦。
    shisang
        37
    shisang   75 天前
    kayseen
        38
    kayseen   69 天前
    @wph95
    话说,你有哪些优秀的 django 项目啊,可以分享一下不?
    (相信大家都想学习下)
    stdout
        39
    stdout   68 天前
    @banxi1988 试试 connexion 这个,应当完全满足你
    matrix1010
        41
    matrix1010   68 天前 via Android
    wzw
        42
    wzw   1 天前
    @ClericPy #20
    @Trim21 #30
    @banxi1988 #11
    @ampedee #31

    fastapi 我也想试试了, 请问如何关闭 /docs 这个, 要不然上线后, 接口一目了然呀
    Trim21
        43
    Trim21   1 天前 via iPhone
    @wzw 把 app 初始化时候的对应参数传 None
    Trim21
        44
    Trim21   1 天前 via iPhone
    @est 依赖问题用 python-poetry 就好了,会自动解决潜在以来可能出现的冲突
    ClericPy
        45
    ClericPy   1 天前
    @wzw #42 测试环境关闭, 线上环境开着就行吧, 简单地在不同环境上配置参数集里带上是否开 docs

    https://fastapi.tiangolo.com/tutorial/application-configuration/#docs-urls

    以前考虑给 docs 加 Oauth, 后来发现, 内网测试环境看就够了, 外网看个屁... 就简单多了
    wzw
        46
    wzw   1 天前 via iPhone
    @ClericPy 谢谢,是不是 fastapi 非常值得试试。
    ClericPy
        47
    ClericPy   1 天前
    @wzw #46 python2 都死了, 还不赶紧上 ASGI 的车[狗头保命], Django 家的 ASGI 也是很不错的

    早年间我是 Bottle 无痛转 flask, 被 Sanic 坑了一段跳了 responder, 然后上了 K 神的当, 直接用它依赖的 starlette, 最后无痛转 fastapi, 连 blacksheep 的作者都被 fastapi 吸引了

    PS: Cython 加速下, falcon 和它的 ASGI 版本 hug 性能都逼近 golang 了, 追求极限性能也可以考虑下, 至于 vibora 什么的更极限性能的, 就是蹭热度玩噱头的, 生产环境不敢上, 给它们修 bug 的时间够我学 golang 去了
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   942 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 22:50 · PVG 06:50 · LAX 14:50 · JFK 17:50
    ♥ Do have faith in what you're doing.