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

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

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

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

    cz5424
        13
    cz5424   74 天前 via iPhone   ♥ 1
    Orenoid
        14
    Orenoid   74 天前   ♥ 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   74 天前
    @Orenoid #14 更正,flasky 跟 7 楼的不是同一个项目,只是同一个作者
    ebingtel
        16
    ebingtel   74 天前
    怎么开心怎么来,都是微服务了……一个 web 项目也可以 install 其他的子项目作为集成
    sujin190
        17
    sujin190   74 天前
    676529483
        18
    676529483   74 天前
    感觉 flask 一直都是关注度高,但开源的大型项目找不到,相反 django 就很多了。根据面试的情况归纳,基本小企业跟风用 flask 的多一些,做的也比较小型
    cpj
        19
    cpj   74 天前
    老帖子里有提到过,并且我实践了 lepture 的那篇文章 ( https://lepture.com/en/2018/structure-of-a-flask-project ),感觉比较舒服
    ClericPy
        20
    ClericPy   74 天前
    早年间用的 https://exploreflask.com/en/latest/organizing.html, 虽然也有中文版教程
    不过楼主这种站长经验丰富的应该不需要这个...

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

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

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

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

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

    fastapi 我也想试试了, 请问如何关闭 /docs 这个, 要不然上线后, 接口一目了然呀
    Trim21
        43
    Trim21   1 小时 9 分钟前 via iPhone
    @wzw 把 app 初始化时候的对应参数传 None
    Trim21
        44
    Trim21   1 小时 5 分钟前 via iPhone
    @est 依赖问题用 python-poetry 就好了,会自动解决潜在以来可能出现的冲突
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4241 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 47ms · UTC 08:53 · PVG 16:53 · LAX 00:53 · JFK 03:53
    ♥ Do have faith in what you're doing.