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 相关的学习资料,谢谢了!
1
kimchan 2017-05-27 13:56:42 +08:00 2
Pythonista
|
2
kimchan 2017-05-27 13:58:10 +08:00
还有就是. flask 的文档没觉得质量差吧...
|
3
sagaxu 2017-05-27 13:58:32 +08:00
http://flask.pocoo.org/docs/0.12/quickstart/#accessing-request-data 这里讲的很清楚啊
request.form 里是 application/x-www-form-urlencoded 里提交的 data request.args 里是写在 URL 里?后面的 parameter request.files 是 multipart/form-data 里上传的文件 current_app 是写扩展的时候用的,request 是请求上下文,g 是让你存全局变量用的 app.route 中指定的变量,在请求中替换成实际的 querypath 中的值后,自动注入到 handle 中去 非常清晰明了和简洁的设计,怎么到你眼里就那么不规范了呢? |
4
timothyqiu 2017-05-27 14:06:43 +08:00
原型在 Reference 额: http://flask.pocoo.org/docs/0.12/#api-reference
|
5
yonoho 2017-05-27 14:20:46 +08:00
flask 是我最欣赏的 python web 框架,我觉得它的设计十分简单优雅,尤其你列举的那些不好用的地方,在我看来都是精髓。
可能楼主对优雅和规范的认识和 flask 的设计者们不太一样吧 |
6
huanglongtiankon 2017-05-27 14:25:03 +08:00
flask 的设计是我见过的最简洁优雅的,没有之一,按理说其他语言的 web 框架我也接触过一些,java 的 spring,php 的 tp5,感觉都没比 flask 好啊,怎么就不优雅了?
|
7
ITOutsider 2017-05-27 14:42:44 +08:00
換 rails 哈哈
|
8
neoblackcap 2017-05-27 14:48:04 +08:00
没有看法
最好读原版的,文档这东西更新很快,不要寄托于社区的翻译热情。 |
9
awanabe 2017-05-27 14:59:08 +08:00
doc 一般只会讲 api 使用吧,你还要别人跟你讲 Request 线程安全
不会直接去查这方便的文档么? 搜搜 Request Flask 如何保证线程安全就一大堆 LocalProxy 什么的 文档很好用,入门方便 |
10
Kilerd 2017-05-27 15:00:18 +08:00 via iPhone
@sagaxu current_app 用于工厂模式下的 app
flask 设计地更精心,要研究一下才能了解。 研究完了就会觉得很多你认为理所当然的地方都是 flask 独特的地方。 再或者,你试试我的框架?(认真脸 |
11
102400 2017-05-27 15:01:10 +08:00 via Android
@huanglongtiankon 看过 Sinatra ?
|
12
fy 2017-05-27 15:06:44 +08:00
没看法。文档好。个人更喜欢 tornado webhandler 那样的请求封装,但 flask 函数这种也可以接受。
|
13
Lycnir 2017-05-27 15:11:03 +08:00
我猜,楼主原先写 java 的?
|
14
wingyiu 2017-05-27 15:20:26 +08:00 1
更喜欢 django
|
15
changwei OP |
16
changwei OP |
17
WayToPlay 2017-05-27 15:51:59 +08:00
看 RxJava 才要命,action0,action1......
|
19
Tyanboot 2017-05-27 15:59:45 +08:00 via Android
那你觉得怎么样才算命名统一呢
|
20
changwei OP @awanabe 如果确实有这个问题,要么来个 tip 点明一下,要么就讲完整,而不是好几个地方穿插一点,讲一半还讲的模棱两可(当然也有可能是翻译问题),毕竟设计模式里面也讲究一个单一职责。你看看文档里面讲作用域,那么一次性讲完,别路由里面穿插一点请求,穿插一点作用域,顺便还讲讲全局作用域,请求和路由之间还穿插一下模板引擎,静态文件导入的教程之类的。我认为这个官方文档内容还算可以,但是详略不是很得当而且顺序安插还是有很多问题。
你看看 codeigniter 的文档从头到尾清爽明了,是什么章节专注讲什么内容。关于 session 锁的问题,至少会讲明白 session 为什么需要锁,没有锁会导致什么后果,然后就快速结题。这样无论是对老鸟还是菜鸟都很友好 |
21
wentian 2017-05-27 16:50:13 +08:00
精巧, 从 Flask 学习到很多, 比如写 py 代码的最佳实践等
我同时是 Django 和 Flask 的粉丝 |
22
awanabe 2017-05-27 17:03:50 +08:00
@changwei 我觉得不是这样的,doc 本来就是快速的给使用方法。 至于你要每一个 API 都要详细深入, 这个就是马上一本书的体量了。
我觉得好的 API 就是给出使用方案, 然后详细的实现,理念。 给出一个链接进去专门的 url。 这样才能深入浅出。 而且我觉得你对 web 理解真的还不行呢。。你要的一些答案早就有人探讨了很多。 |
23
changwei OP @awanabe 我希望有那种快速入门的文档,既然是一个微型框架,那么也别把入门弄得比一些全栈框架还繁琐。codeignitor 就是一个典型,文档解耦合做的非常好,我需要什么就看什么,而且他的 api 原型写的清晰明了,任何一个有 php 基础和了解 mvc 的人绝对看十几分钟之后就可以开始用它写项目,而 flask 文档就太啰嗦了,没有重点和粗体标识,就像很多中小学教科书一样,我又不敢跳着看,生怕略过什么。
|
25
billlee 2017-05-27 19:58:53 +08:00
@changwei #16 你以前写 Java, 为什么会不熟悉线程安全的问题啊? Java Servlet 跑起来的时候也是多线程的啊,访问数据库也是靠连接池,和 python 的并发模型应该是完全一样的,应该只有语法糖上的区别吧
|
26
9nix00 2017-05-27 20:01:06 +08:00 2
首先我觉得题主文档没看对,出名的开源项目还是先把官方的摸熟了再看其他比较好。
如果要说 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 难道就不能设计微服务了吗? 又一个重复的轮子。 |
27
chaleaoch 2017-05-27 20:38:11 +08:00
flask 的文档挺好的,要不你看看 odoo 的文档,那酸爽。。。
|
28
zhuangzhuang1988 2017-05-27 21:37:16 +08:00
民用级别。
|
30
TangMonk 2017-05-28 08:19:16 +08:00 via Android
flask 真的好不友好,我用过 sinatra,rails,感觉 Python 在 web 当面真的不行,还没用过 django
|
31
huanglongtiankon 2017-05-28 08:34:17 +08:00
@9nix00 Django 对 mongodb 的支持太差了,蓝图是 flask 的精髓啊,怎么就丑了
|
32
troywinter 2017-05-28 10:29:25 +08:00
我司現在就在用 flask,可能是我們技術水平的問題,並不覺得在項目體量上去以後 flask 的伸縮性多麼好,再加上各種插件質量參差不齊,實際感覺不如用 django,django 並不重,想要輕量級可以參考 lightweight django 這本書。至於 flask 設計精巧的問題,與 python 其他框架相比,如 pyramid,cherrypy 等,flask 的優勢並不是非常的明顯,至少沒有非常突出的特點。
|
33
shyling 2017-05-28 10:53:32 +08:00 via iPad
刚开始也不是很懂 flask,然后自己试了试实现了一个就大概懂了… 不过还是更喜欢 sinatra
|
34
29EtwXn6t5wgM3fD 2017-05-28 12:07:59 +08:00 via iPhone
买本 Flask Web 开发看看吧~
|
35
neoblackcap 2017-05-28 21:11:05 +08:00
@huanglongtiankon 主要是你都用 blueprint 了,跟 Django 的子应用已经没太大区别了。面对大而全的 Django,也就是风格上面的差异罢了。至于 mongodb 完全跟 django 一切使用,Django 内跟 ORM 非常紧密耦合的地方其实不多,大可以用你自己顺手的库。
|
36
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 |