你们对 Flask 这个框架的设计有什么看法吗?

2017-05-27 13:43:25 +08:00
 changwei

V2EX 上 Pythoner 应该比较多,不知道大家对于这个框架怎么看。

我最近也是花了一点时间学了学,感觉这个框架在设计上有很多不是很优雅很规范的地方。

官方文档条理不是很清晰,先不说翻译质量,就英文文档来说,没有像 CodeIgniter 的文档一样把每一个模块小节涉及到的函数的函数原型贴出来,基本上很多东西得边写边试才知道,如果时间很紧迫可能我并没有那么多时间去一个一个 API 的试,也不会把他文档里面的长篇大论全部看一遍,当然我知道他有 API 文档,但是毕竟 API 只是起一个工具字典的作用,很多概念还是得靠文字解释来理解。还有比如说 WEB 应用最常见的 GET,POST 居然放到很后面才讲,而且一会儿 request.form 一会儿 request.args.get,要么还有直接 app.route 里面取值的,不像别的编程语言一样都是统一的 API 获取。还有作用域,对于很多从 PHP,Java Servlet 等转过来的开发者可能对于为什么 request 需要保证线程安全等的概念不是很了解,而官方文档对于这个问题也是很简单的略过,还有命名用什么 g,current_app,request 等等,命名也不统一一下,像写 PHP 或者 ASP,我知道可以知道其中一个 API 之后后面的举一反三,这个 Flask 在 API 设计上命名风格没有统一让强迫症有点受不了啊。

还有我看的是 http://docs.jinkan.org/docs/flask/ 这个版本的翻译,我没有为开源社区贡献什么,也不好怎么批评,求大家推荐一些更好的翻译版本或者 Flask 相关的学习资料,谢谢了!

9601 次点击
所在节点    Python
36 条回复
wentian
2017-05-27 16:50:13 +08:00
精巧, 从 Flask 学习到很多, 比如写 py 代码的最佳实践等

我同时是 Django 和 Flask 的粉丝
awanabe
2017-05-27 17:03:50 +08:00
@changwei 我觉得不是这样的,doc 本来就是快速的给使用方法。 至于你要每一个 API 都要详细深入, 这个就是马上一本书的体量了。
我觉得好的 API 就是给出使用方案, 然后详细的实现,理念。 给出一个链接进去专门的 url。 这样才能深入浅出。
而且我觉得你对 web 理解真的还不行呢。。你要的一些答案早就有人探讨了很多。
changwei
2017-05-27 19:49:54 +08:00
@awanabe 我希望有那种快速入门的文档,既然是一个微型框架,那么也别把入门弄得比一些全栈框架还繁琐。codeignitor 就是一个典型,文档解耦合做的非常好,我需要什么就看什么,而且他的 api 原型写的清晰明了,任何一个有 php 基础和了解 mvc 的人绝对看十几分钟之后就可以开始用它写项目,而 flask 文档就太啰嗦了,没有重点和粗体标识,就像很多中小学教科书一样,我又不敢跳着看,生怕略过什么。
billlee
2017-05-27 19:52:32 +08:00
@sagaxu #3 g 是 thread-local storage 吧?
billlee
2017-05-27 19:58:53 +08:00
@changwei #16 你以前写 Java, 为什么会不熟悉线程安全的问题啊? Java Servlet 跑起来的时候也是多线程的啊,访问数据库也是靠连接池,和 python 的并发模型应该是完全一样的,应该只有语法糖上的区别吧
9nix00
2017-05-27 20:01:06 +08:00
首先我觉得题主文档没看对,出名的开源项目还是先把官方的摸熟了再看其他比较好。

如果要说 flask 怎么样,我推荐看看这篇 https://wakatime.com/blog/14-pirates-use-flask-the-navy-uses-django

Pirates use Flask, the Navy uses Django 这个观点是很有兴趣的,当然我觉得海盗思维使用 django 其实更有杀伤力。

大部分观点我认同,特别是性能方面的观点。
用 python 还要来追求性能我一直觉得是在讲笑话,且嗤之以鼻。基于 python 做 web 开发更多的是追求开发效率。
要知道现在一个程序员的工资可够你买很多台机器做性能提升了。

另外现在的机器对 DAU 没过千万的网站,python 也足够了。要说瓶颈,大部分 web 场景其实都是 IO 的瓶颈,和中间件没什么关系。

另外本人支持 django,flask 真的只适合小大小闹,当项目大了,你一样要不得不引入 class view 的概念。
数百个控制器,一样需要把 url 模块化。 看看 flask,blueprint 一引入,整个项目就又丑了。

最后你会发现,这和 django 有什么区别呢? 微服务吗?基于 django 难道就不能设计微服务了吗?
又一个重复的轮子。
chaleaoch
2017-05-27 20:38:11 +08:00
flask 的文档挺好的,要不你看看 odoo 的文档,那酸爽。。。
zhuangzhuang1988
2017-05-27 21:37:16 +08:00
民用级别。
sagaxu
2017-05-28 00:14:47 +08:00
@billlee g 是 application context 上的东西,当然是 thread local 了
TangMonk
2017-05-28 08:19:16 +08:00
flask 真的好不友好,我用过 sinatra,rails,感觉 Python 在 web 当面真的不行,还没用过 django
huanglongtiankon
2017-05-28 08:34:17 +08:00
@9nix00 Django 对 mongodb 的支持太差了,蓝图是 flask 的精髓啊,怎么就丑了
troywinter
2017-05-28 10:29:25 +08:00
我司現在就在用 flask,可能是我們技術水平的問題,並不覺得在項目體量上去以後 flask 的伸縮性多麼好,再加上各種插件質量參差不齊,實際感覺不如用 django,django 並不重,想要輕量級可以參考 lightweight django 這本書。至於 flask 設計精巧的問題,與 python 其他框架相比,如 pyramid,cherrypy 等,flask 的優勢並不是非常的明顯,至少沒有非常突出的特點。
shyling
2017-05-28 10:53:32 +08:00
刚开始也不是很懂 flask,然后自己试了试实现了一个就大概懂了… 不过还是更喜欢 sinatra
29EtwXn6t5wgM3fD
2017-05-28 12:07:59 +08:00
买本 Flask Web 开发看看吧~
neoblackcap
2017-05-28 21:11:05 +08:00
@huanglongtiankon 主要是你都用 blueprint 了,跟 Django 的子应用已经没太大区别了。面对大而全的 Django,也就是风格上面的差异罢了。至于 mongodb 完全跟 django 一切使用,Django 内跟 ORM 非常紧密耦合的地方其实不多,大可以用你自己顺手的库。
TJT
2017-05-29 22:32:13 +08:00
如果从其他语言来的刚接触 Flask 是有点困难,上手之后用来写中小型的项目妥妥的。和 Django 没什么可比性,设计目的都不一样。

另外这文档质量不咋地,也很旧,里面还是建议使用 Python2,而官方的文档很久之前就改了建议使用 Python3

http://docs.jinkan.org/docs/flask/advanced_foreword.html#python-3
http://flask.pocoo.org/docs/0.12/python3/#python3-support

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

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

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

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

© 2021 V2EX